正则表达式:在未转义的引号之间获取值

RegEx: Grabbing values between not escaped quotation marks

此问题与RegEx: Grabbing values between quotation marks

相关

最佳答案中的正则表达式

(["'])(?:(?=(\?)).)*?

通过

测试

Debuggex Demo

也匹配以转义双引号开头的字符串。我试图扩展定义以使用负面回顾。

(["'](?<!\))(?:(?=(\?)).)*?

Debuggex Demo

但这不会改变匹配模式中的任何内容。 关于如何排除转义单引号/双引号作为起始模式的任何建议?

我想在 nedit 中使用它作为高亮模式,它支持 regex-lookbehind。

所需匹配的示例:

<p>
  <span style="color: #ff0000">"str1"</span> notstr
  <span style="color: #ff0000">"str2"</span>
  \"notstr <span style="color: #ff0000">"str4"</span>
</p>

对前面没有另一个反斜杠的反斜杠使用否定 lookbehind,即

(?<!(?<!\)\)["']

解决问题:

((?<!(?<!\)\)["'])(?:(?=(\?)).)*?(?<!(?<!\)\)

Demo.

你应该对这种方法非常小心,因为通常正则表达式不是解析标记语法输入的好工具。您最好使用全面的解析器,然后有选择地将正则表达式应用于从中返回的部分。