正则表达式仅匹配非转义字符

Har*_*ikk 4 regex swift

好吧,所以我试图使用正则表达式来匹配角色的实例,只要它没有被转义(使用反斜杠)并决定使用负面的后视,如下所示:

(?<!\\)[*]
Run Code Online (Sandbox Code Playgroud)

这成功并且按预期失败foo*,foo\*分别使用和等字符串.

但是,它不适用于字符串,例如foo\\*- 在特殊字符前面有一个反斜杠转义另一个反斜杠(一个本身是转义的转义序列).

是否可以使用负面后视(或其他一些技术)来跳过特殊字符,只有它们前面有奇数个反斜杠?

Har*_*ikk 8

我发现以下解决方案适用于NSRegularExpression但也适用于我尝试过的所有支持负面观察的regexp实现:

(?<!\\)(?:(\\\\)*)[*]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第二个不匹配的括号匹配任何反斜杠对,有效地消除它们,此时负面的后视可以按预期比较任何剩余的(奇数编号)反斜杠.

  • 这是可行的,但它不能匹配未转义的反斜杠 - 你知道如何扩展它以允许这样做吗? (2认同)