请教一个关于正则表达式的问题。

图片无法上传,先发代码块出来:

[ContentPlugins]
0=%COMMANDER_PATH%\Plugins\Wdx\CDocProp\CDocProp.wdx64
0_detect=
1=%COMMANDER_PATH%\Plugins\Wdx\Exif\Exif.wdx64
1_detect=EXT="JPG" | EXT="JPEG" | EXT="TIFF" | EXT="TIF" | EXT="JPE" | EXT="CRW" | EXT="THM"
2=%COMMANDER_PATH%\Plugins\Wdx\FileDiz\FileDiz.wdx64
2_detect=
3=%COMMANDER_PATH%\Plugins\Wdx\ShellDetails\ShellDetails.wdx64
3_detect=
ThumbsCustomField=[=tc.size.bkMG2]  [=shelldetails.类型]\n[=tc.writedate.Y/M/D h:m:s]
0Fields=[=tc.fullname]\n\n数据来源 --- 内容插件\n=====================\n标题:[=cdocprop.Title]\n

如上:
使用EmEditor自定义ini的语法高亮,我定义了选择器[section](每行开头的[])
(键=值)name=value,也定义了键:每行开头,匹配第一个=符号之前的字符串:^(.+?)(?=\=)
在符号“=”这里遇到问题。
我只想让“=”高亮并只匹配一次(只匹配第一个=)。
但是使用:
={0,1}
=?
={1)
这些写法都无效。

请教写法。

(?<=^[^=]*)=
试试断言

无效,=符号还是全部都被着色了。
但还是谢谢解答。

图发不出来,很奇怪。
我想要的是“=”匹配。
第一个“=”之前的字符串我已经用:^(.+?)(?==)匹配了。

这个试了吗,我这边没问题

匹配第一个=就有点复杂了,如果是支持g选项的,用不带g选项的即可,但如果没有这个功能,就要用到“不定长的前向回顾”,而这个功能绝大多数正则引擎都是不支持的。

这里只能用后发断言,或者用分组。
如果不支持的话,看能不能覆盖着色,先给^(.+?)\=着色,再给^(.+?)(?=\=)着色就行了吧。

2 Likes

直接报表达式错误了。 :joy:

看来和我测试的正则引擎不一样。

顶一个,陷入顺序思维了。按照这个顺序成功解决。

还可以这样,绝了

这没什么难度吧 ?

^[^=\[]+

一般用逆序环视 (?<=^[^=]*)=
然而,Emeditor的正则引擎不支持不定长逆序环视,不过这个特性是有替代方案的:\K
^[^=]*\K=
image