正则表达式,sublime-syntax 文件,匹配除特定组外的特定字符后的所有内容

Regex, sublime-syntax file, matching all after a particular character except a specific group

我有一个具有特定语法的新文件扩展名,我创建了一个 sublime-syntax 文件,我正试图在 sublime 文本编辑器中突出显示某些字符..

假设以下文本:

Accept-Language: en-EN
n1.legend=0,1,meta,text,Legend,b1,30 chars max
r1.label=Contain

我想匹配“:”或“=”之后的所有字符,字母“b”后跟一个或两个数字(如占位符)除外。我尝试了以下正则表达式:

(?<=[=|:])((?!b[0-9]{1,2}).)*

它可以工作,但它不匹配“b1”之后的字符,例如“,30 chars max”,这是为什么?有什么帮助吗?我不是正则表达式专家..

问题捕捉:

",30 chars max" must be yellow..

如果您想从行 0,1,meta,text,Legend,1,30 chars max 匹配 0,1,meta,text,Legend,,30 chars max 那么以下正则表达式应该适合您的需要:

=(.*)b\d{1,2}(.*)

连接第一个和第二个匹配组(替换字符串 )得到你的匹配。

RegExr demo

要仅获取匹配项(如果支持),您可以使用 \G 获取重复匹配项并使用 \K 清除匹配缓冲区。

(?:^[^=:\r\n]+[=:]|\G(?!^))(?:b\d{1,2})?\K.*?(?=b\d{1,2}|$)

说明

  • (?:非捕获组
    • ^[^=:\r\n]+[=:] 匹配字符串开头的模式
    • |
    • \G(?!^) 在上一场比赛中断言肯定,而不是在开始时断言
  • ) 关闭群组
  • (?:b\d{1,2})? 可选择匹配 b 后跟 2 个数字
  • \K 重置匹配缓冲区
  • .*? 尽可能少地匹配除换行符之外的任何字符(非贪婪)
  • (?=b\d{1,2}|$) 正面前瞻,断言右边是 b 后跟 2 位数字或字符串结尾

Regex demo