首先,这是使用preg。
字符串我正在尝试匹配:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b c d xp
我的正则表达式和他们的比赛:
(\S*\s*){0,1}\S*p = "d xp"
(\S*\s*){0,2}\S*p = "c d xp"
(\S*\s*){0,3}\S*p = NO MATCH (expecting "b c d xp"
(\S*\s*){0,4}\S*p = entire string
(\S*\s*){0,5}\S*p = entire string
奇怪的是,如果我删除一个“a”就可以了。此外,(\S*\s*){0,3}\Sp
或(\S*\s){0,3}\S*p
都有效。
有人可以解释为什么第三种情况导致没有匹配而不是“b c d xp”?
TIA!
答案 0 :(得分:7)
好问题。
我尝试了另一种也有Perl RE语法Ruby的语言,它返回了预期的字符串:
$ irb
>> s='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b c d xp'
=> "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b c d xp"
>> s[/(\S*\s*){0,3}\S*p/]
=> "b c d xp"
这让我觉得你找到了一个翻译错误......
但我们现在知道了
答案 1 :(得分:2)
preg_last_error()
返回PREG_BACKTRACK_LIMIT_ERROR,因此增加回溯限制应该可以解决问题。尝试
ini_set('pcre.backtrack_limit', 500000);