2

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

4

2 回答 2

4

使用这个正则表达式:

(?<!\\)'

这意味着匹配所有前面没有反斜杠的撇号字符(反斜杠本身被转义,因为它是正则表达式的特殊字符)

于 2013-07-09T10:26:38.330 回答
3

如果您使用 .NET 正则表达式引擎或其他可以处理不定长度后向断言的引擎,请使用

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

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

解释:

(?<=        # 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(or \1) 将包含匹配的反斜杠,因此您可以将结果替换为\1\\'or $1\\',具体取决于 QRegExp 实现的细节。

于 2013-07-09T10:32:26.153 回答