为什么正则表达式模式 "\r"、"\n"、"\s"、"[\n\r]" 不能匹配这个换行符?

3

有人能告诉我为什么正则表达式无法匹配",2336" 在",2336,"之后吗?

短语:

ratio:71%  
win:2336,2367,23363626,2336,2336  
877  
lose:2336  

尝试的模式:
(:|,)2336(,|\s|$)  
(:|,)2336(,|\n|$)  
(:|,)2336(,|\r|$)  
(:|,)2336(,|[\n\r]|$)  

http://regexr.com/3fgb7


1
因为在你的所有变体中,逗号都是必须的。类似 (:|,)2336(|,\s|$) 这样的表达式将允许匹配最后一个 2336 - Laur Ivan
1
由于它匹配前面的",2336,",所以下一个字符是2,而不是"(:|,)"。 - bcl
1个回答

4
你的问题在于两个2336实例之间的逗号已经被前一个匹配使用,因此它不能再次匹配,但你的正则表达式要求这样做。
你可以通过将第二组更改为肯定的前瞻断言来解决这个问题。
(:|,)2336(?=[,\s]|$)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接