首先,这是使用 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”?
蒂亚!
最佳答案
好问题。
我尝试了另一种也有 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"
这让我觉得你发现了一个解释器错误......
但我们现在知道
关于正则表达式匹配重复组 {0,2} 或 {0,4},但 {0,3} 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641211/