PHP 带破折号和符号的正则表达式不起作用
PHP Regexp with dash and ampersand doesn't work
这是一个字符串:
$test = '<a id="test">One & -Two - Three</a>';
我想将这两个字符串捕获到 2 个不同的变量中,例如:
$string1 = 'One & -Two';
和
$string2 = 'Three';
所以我使用了 preg_match_all 但我的正则表达式有问题:
preg_match_all('#([-;\w\ \.\/\'\d\(\)\&]+)+ - ([\w+\ \.\-]+)+#', $test, $matches);
有人可以向我解释为什么它不起作用..?我看不出哪个 'rule' 我不尊重这里..
第+
后)
(([-;\w\ \.\/\'\d\(\)\&]+)+
)causes the catastrophic backtracking issue (see more on this here) as this is the case of a (a+)+
type of pattern that is not the ending subpattern. Removing that +
already solves the issue.
最后一个子模式也有同样的问题,但不会因为内部 PCRE 优化而造成问题。
此外,我认为您在这里不需要任何正则表达式,使用 explode
和 strip_tags
:
$test = '<a id="test">One & -Two - Three</a>';
$res = explode(" - ", strip_tags($test));
echo $res[0]. "\n" . $res[1];
这是一个字符串:
$test = '<a id="test">One & -Two - Three</a>';
我想将这两个字符串捕获到 2 个不同的变量中,例如:
$string1 = 'One & -Two';
和
$string2 = 'Three';
所以我使用了 preg_match_all 但我的正则表达式有问题:
preg_match_all('#([-;\w\ \.\/\'\d\(\)\&]+)+ - ([\w+\ \.\-]+)+#', $test, $matches);
有人可以向我解释为什么它不起作用..?我看不出哪个 'rule' 我不尊重这里..
第+
后)
(([-;\w\ \.\/\'\d\(\)\&]+)+
)causes the catastrophic backtracking issue (see more on this here) as this is the case of a (a+)+
type of pattern that is not the ending subpattern. Removing that +
already solves the issue.
最后一个子模式也有同样的问题,但不会因为内部 PCRE 优化而造成问题。
此外,我认为您在这里不需要任何正则表达式,使用 explode
和 strip_tags
:
$test = '<a id="test">One & -Two - Three</a>';
$res = explode(" - ", strip_tags($test));
echo $res[0]. "\n" . $res[1];