如何匹配撇号('),除非它被转义(\')?

时间:2013-07-09 10:24:07

标签: regex

是否可以为此构造正则表达式?如果是这样,如果有人展示如何,我会很感激。

2 个答案:

答案 0 :(得分:4)

使用此正则表达式:

(?<!\\)'

这意味着匹配所有不带反斜杠的撇号字符(反斜杠本身是自动转义的,因为它是regexp的特殊字符)

答案 1 :(得分:3)

如果您使用的是.NET正则表达式引擎或其他可以处理无限长的lookbehind断言的引擎,那么请使用

(?<=(?<!\\)(?:\\\\)*)'

确保在撇号之前存在偶数个反斜杠。

<强>解释

(?<=        # Assert that the following regex matches before the current position:
 (?<!\\)    # No backslash before...
 (?:\\\\)*  # ... an even number of backslashes.
)           # (End of lookbehind assertion)
'           # Match an apostrophe.

如果您的正则表达式引擎无法处理,那么您需要将(甚至数量的)反斜杠作为匹配的一部分并在以后对其进行说明:

(?<!\\)((?:\\\\)*)'

现在$1(或\1)将包含匹配的反斜杠,因此您可以将结果替换为\1\\'$1\\',具体取决于QRegExp实现的详细信息