是否可以为此构造一个正则表达式?如果是这样,如果有人展示如何,我将不胜感激。
问问题
236 次
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 回答