正则表达式,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}(.*)
连接第一个和第二个匹配组(替换字符串
)得到你的匹配。
要仅获取匹配项(如果支持),您可以使用 \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 位数字或字符串结尾
我有一个具有特定语法的新文件扩展名,我创建了一个 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}(.*)
连接第一个和第二个匹配组(替换字符串 )得到你的匹配。
要仅获取匹配项(如果支持),您可以使用 \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 位数字或字符串结尾