用于匹配语法高亮器字符串的正则表达式

Regular expression to match strings for syntax highlighter

我正在寻找与代码编辑器中使用的语法突出显示字符串相匹配的正则表达式。我找到了

(")(?:(?!|\).|\.)*

从这里开始regex-grabbing-values-between-quotation-marks(我改变了开头,因为我只需要双引号,不需要单引号)

上面的正则表达式正确匹配了转义双引号和转义反斜杠的以下示例

"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 组的反向引用或使用当前模式断言字符串的结尾。

(")(?:(?!|\).|\.)*(?:|$)

但是因为你只捕获一个字符 (") 你可以省略捕获组而不是反向引用 </code> 只匹配 <code>"

另一种写法:

"[^"\]*(?:\.[^"\]*)*(?:"|$)

看到一个regex demo.


如果匹配不应以 \" 开头并且支持后视:

(?<!\)"[^"\]*(?:\.[^"\]*)*(?:"|$)

此模式匹配:

  • (?<!\)负向后视,断言不是\直接向左
  • " 匹配双引号
  • [^"\]* 可选择匹配除 "\
  • 之外的任何字符
  • (?:\.[^"\]*)* 可选择重复匹配 \ 和任何字符后跟除 "\
  • 之外的任何字符
  • (?:"|$) 匹配 " 或断言字符串结尾。