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