我正在尝试拆分这样的字符串:
$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;
}
这似乎比我现在理解的要复杂得多,但到目前为止被卡住了..
答案 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
修饰符使模式不区分大小写,.
可能与换行符匹配。