RegEx:在未转义的引号之间抓取值

时间:2017-03-28 12:04:54

标签: regex regex-lookarounds negative-lookbehind nedit

此问题与RegEx: Grabbing values between quotation marks

有关

最佳答案的RegEx

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

测试

Debuggex Demo

还匹配以转义双引号开头的字符串。我试图将定义扩展到一个负面的看法。

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

Debuggex Demo

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

我想在nedit中使用它作为突出显示模式,它支持正则表达式 - 后看。

所需匹配的示例:

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

1 个答案:

答案 0 :(得分:1)

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

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

解决了这个问题:

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

Demo.

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

相关问题