dog # match 'dog'
(?: # begin a non-capture group
(?! # begin a negative lookahead
pig # match 'pig'
) # end the negative lookahead
. # match any character other than a line terminator
) # end the non-capture group
* # execute the preceding non-capture group zero or more times
cat # match 'cat'
1条答案
按热度按时间gywdnpxw1#
假设我们想匹配一个以
'dog'
开始,以'cat'
结束的字符串,但不包含'pig'
。我们可以使用一个正则表达式来实现这一点,该表达式采用了回火贪婪令牌技术,该技术采用了负向前看:Demo .
虽然逻辑上不可能证明这个任务不能用不包含lookaround的正则表达式来完成,但我不知道这样的表达式。请读者提出一个这样的表达式。
这个正则表达式可以分解如下。
仔细想想,我们可以使用所有允许字符的所有数字(直到字符串大小小于6)的所有排列的交替,形成一个不包含
'pig'
的字符串:dogcat|dogacat|dogbcat| ... |dogaabcat|dogabacat| ... |dogaZrnpiht0xcat|...
,但是对于更长的字符串,这在计算上可能有些苛刻。