最佳正则表达式技巧是关于编写匹配
r1
但不匹配r2
的正则表达式。他们给出的示例是匹配 Tarzan
(和 "Tarzan and Jane"
)但不匹配 "Tarzan"
的正则表达式。在经历了一些不起作用的事情之后,他们给出了“有史以来最好的正则表达式技巧”:
"Tarzan"|(Tarzan)
这应该首先匹配“坏字符串”,跳过好字符串,但不将坏字符串包含在捕获组中。如果只出现好的字符串,我们最后匹配它并将其包含在捕获组中。
“最佳正则表达式技巧”的一个缺点是,即使它没有捕获,它仍然
匹配
"Tarzan"
。例如,您不能在没有额外样板的情况下在条件条件中使用它吗?
这是基于 PCRE 风格的正则表达式。 Raku 使用完全不同的正则表达式表示法。是否可以更简单地完成这个技巧?理想情况下,这应该是可能的:
> ('"Tarzan"', 'Tarzan', '"Tarzan and Jane"') <<~~>> /some-regex/
(Nil 「Tarzan」 「Tarzan」)
使用消极的环视。
第一个替代匹配
Tarzan
,前面没有 "
,但后面可以有 "
)。第二个匹配 Tarzan
,后面没有 "
,但前面可以有 "
。但如果 "
既在之前又在之后,则两者都不会匹配。
(?<!")Tarzan|Tarzan(?!")