我想分割由我们只能使用的旧版本 phpstan (v0.9) 生成的字符串。
每个错误字符串都由 :
分隔,但有时会出现用 ::
标记的静态调用,我想忽略它们。
我的代码:
$error = '/path/to/file/namespace/filename:line_number:error message Namespace\ClassName::method().'
$output = preg_split('/:/', $error);
$output
的 var_dump
给出:
Array
(
[0] => /path/to/file/namespace/filename
[1] => line_number
[2] => error message Namespace\ClassName
[3] =>
[4] => method().
)
我想要的结果是这样的:
Array
(
[0] => /path/to/file/namespace/filename
[1] => line_number
[2] => error message Namespace\ClassName::method().
)
我希望可以用正则表达式解决这个问题。
我一直在阅读类似的问题,并尝试过正则表达式的变体,但没有一个有效。
最佳答案
您可以使用前视和后视进行分割:
$error = '/path/to/file/namespace/filename:line_number:error message Namespace\ClassName::method().';
$arr = preg_split('/(?<!:):(?!:)/', $error, -1, PREG_SPLIT_NO_EMPTY);
print_r($arr);
Array
(
[0] => /path/to/file/namespace/filename
[1] => line_number
[2] => error message Namespace\ClassName::method().
)
正则表达式详细信息:
-
(?<!:)
:如果存在:
,则负向后查找会使匹配失败后面 -
:
:匹配:
-
(?!:)
:如果存在:
,则负向预测会使匹配失败领先
关于php preg_split 忽略重复的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60579827/