我正在为代码编辑器中使用的语法高亮显示寻找一个匹配字符串的正则表达式。我找到了
(")(?:(?!1|\).|\.)*1
从这里开始,regex在引号之间抓取值(我已经更改了开头,因为我只需要双引号,不需要单引号(
上面的正则表达式正确地匹配了以下具有转义双引号和转义反斜杠的示例
"this is " just a test\"
然而,大多数代码编辑器也会突出显示开放端字符串,例如下面的示例
"this must " match\" this text must not be matched "this text must be matched as well
是否可以更改上面的正则表达式以匹配开放端字符串?另一种可能是第二个正则表达式,它刚好匹配诸如之类的开放端字符串
"[^"]*$ but match only if preceded by an even count of non-escaped quotes
您可以使用一个替换来匹配对组1的反向引用,或者使用当前模式断言字符串的末尾。
(")(?:(?!1|\).|\.)*(?:1|$)
但是,由于您只捕获单个字符(")
,因此可以省略捕获组,而不使用后引用1
,只匹配"
备选书写模式:
"[^"\]*(?:\.[^"\]*)*(?:"|$)
请参阅regex演示。
如果匹配不应以"
开始,并且支持查找:
(?<!\)"[^"\]*(?:\.[^"\]*)*(?:"|$)
此模式匹配:
(?<!\)
反向查找,直接向左断言非"
匹配双引号[^"\]*
可选地匹配除"
或之外的任何字符
(?:\.[^"\]*)*
可选地重复匹配和任何字符,然后是除
"
或之外的任何字符
(?:"|$)
匹配"
或断言字符串的末尾