如何从字符串 PHP 中分离字母、数字、下划线和破折号

How to separate letters, numbers, undescore and dash from string PHP

我正在尝试像这样拆分字符串:

$string = letters1234_1-someMoreText;

输出应该是:

$string_split [letters1234, 1, someMoreText];

仅当字符串匹配所需的模式时。

if(preg_match('/^([A-Z]+)([0-9])([_])([0-9])([-])/', $string)) {
       $string_split = preg_split('/^([A-Z]+[0-9]+)([_])([0-9])([-])([A-Z]+[0-9]+)/', $string);
}else{
       $string_split = $string;
}

这似乎比我现在理解的要复杂得多,但到目前为止卡住了..

您实际上可以使用当前的正则表达式(并向其添加 .* 以匹配字符串尾部)和 preg_match function 并使用 捕获组 来捕获您需要获得的部分。在您的情况下,只需检查 preg_match 并找到匹配项后,将找到的捕获分配给 $string_split 变量:

$string = "letters1234_1-someMoreText";
$string_split = $string;
if (preg_match('/^([A-Z]+[0-9]+)_([0-9])-(.*)/si', $string, $matches)) {
    array_shift($matches);
    $string_split = $matches;
}
print_r($string_split);

看到 PHP demo 产生

Array
(
    [0] => letters1234
    [1] => 1
    [2] => someMoreText
)

图案详情

  • ^ - 字符串开头
  • ([A-Z]+[0-9]+) - 捕获第 1 组:一个或多个字母后跟 1+ 个数字
  • _ - 下划线
  • ([0-9]) - 捕获第 2 组:一个数字
  • - - 一个连字符
  • (.*) - 任何 0+ 个字符

is 修饰符使模式不区分大小写,. 可以匹配换行符。