是否可以为此构造正则表达式?如果是这样,如果有人展示如何,我会很感激。
答案 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实现的详细信息