擅长:python、mysql、java
<p>下面的正则表达式解决方案在大多数情况下都可以工作,但是如果不平衡的单引号出现在字符串文本之外,例如在注释中,它可能会中断。在</p>
<p>在上下文中匹配字符串的一个常见的regex技巧是匹配需要替换和匹配的内容,并捕获需要保留的内容。在</p>
<p>下面是一个Python演示示例:</p>
<pre><code>import re
rx = r"('[^'\\]*(?:\\.[^'\\]*)*')|\b{0}\b"
s = r"""
var foe = 10;
foe = "";
dark_vador = 'bad guy'
foe = ' I\'m your father, foe ! '
bar = thingy + foe"""
toReplace = "foe"
res = re.sub(rx.format(toReplace), lambda m: m.group(1) if m.group(1) else 'NEWORD', s)
print(res)
</code></pre>
<p>参见<a href="https://ideone.com/ZkooXP" rel="nofollow noreferrer">Python demo</a></p>
<p>正则表达式看起来像</p>
^{pr2}$
<p>参见<a href="https://regex101.com/r/Qt6tm5/1" rel="nofollow noreferrer">regex demo</a>。在</p>
<p><code>('[^'\\]*(?:\\.[^'\\]*)*')</code>部分将单引号的字符串文本捕获到组1中,如果匹配,则将其放回结果中,<code>\bfoe\b</code>匹配任何其他字符串上下文中的整个单词{<cd3>},然后替换为另一个单词。在</p>
<p><strong>注意</strong>:要同时匹配双引号字符串文本,请使用<code>r"('[^'\\]*(?:\\.[^'\\]*)*'|\"[^\"\\]*(?:\\.[^\"\\]*)*\")"</code>。在</p>