Raku 中的“最佳正则表达式技巧”

问题描述 投票:0回答:1

最佳正则表达式技巧是关于编写匹配

r1
但不匹配
r2
的正则表达式。他们给出的示例是匹配
Tarzan
(和
"Tarzan and Jane"
)但不匹配
"Tarzan"
的正则表达式。在经历了一些不起作用的事情之后,他们给出了“有史以来最好的正则表达式技巧”:

"Tarzan"|(Tarzan)

这应该首先匹配“坏字符串”,跳过好字符串,但不将坏字符串包含在捕获组中。如果只出现好的字符串,我们最后匹配它并将其包含在捕获组中。

“最佳正则表达式技巧”的一个缺点是,即使它没有捕获,它仍然

匹配
"Tarzan"。例如,您不能在没有额外样板的情况下在条件条件中使用它吗?

这是基于 PCRE 风格的正则表达式。 Raku 使用完全不同的正则表达式表示法。是否可以更简单地完成这个技巧?理想情况下,这应该是可能的:

> ('"Tarzan"', 'Tarzan', '"Tarzan and Jane"') <<~~>> /some-regex/
(Nil 「Tarzan」 「Tarzan」)
regex raku
1个回答
0
投票

使用消极的环视。

第一个替代匹配

Tarzan
,前面没有
"
,但后面可以有
"
)。第二个匹配
Tarzan
,后面没有
"
,但前面可以有
"
。但如果
"
既在之前又在之后,则两者都不会匹配。

(?<!")Tarzan|Tarzan(?!")

演示

© www.soinside.com 2019 - 2024. All rights reserved.