如何从字符串PHP中分隔字母,数字,非核心和短划线

时间:2018-06-12 08:29:50

标签: php regex string preg-match preg-split

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

$string = letters1234_1-someMoreText;

输出应为:

$string_split [letters1234, 1, someMoreText];

仅当字符串与所需的patern匹配时。

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;
}

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

1 个答案:

答案 0 :(得分:1)

您实际上可以使用当前的正则表达式(并将.*添加到其中以匹配字符串尾部)和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修饰符使模式不区分大小写,.可能与换行符匹配。