我有以下正则表达式:
%(?:\\.|[^%\\ ])*%([,;\\\s])
这很好,但显然它也会突出显示最后一个%
的下一个字符。
我在想我怎么能把它排除在regex之外呢?
例如,如果我有:
The files under users\%username%\desktop\ are:
它将突出显示%username%\
,但我只想要%username%
。另一方面,如果我像这样离开regex:
%(?:\\.|[^%\\ ])*%
…然后它将匹配这个模式,我不想:
%example1%example2%example3
知道如何通过正则表达式排除匹配中的最后一个字符吗?
您可以使用比当前使用的更有效的regex。当交替与量词一起使用时,会涉及不必要的回溯。
如果你的琴弦很短,可以用。但是,如果它们可以更长一些,则可能需要“展开”表达式。
这是如何做到的:
正则表达式分解:
%
-初始百分比符号[^"\\%]*
-展开模式的开始:除双引号、反斜杠和百分比符号外,0个或多个字符(?:\\.[^"\\%]*)*
-0或更多。。。\\.
-后跟换行符以外的任何字符的文本反斜杠[^"\\%]*
-除双引号、反斜杠和百分号以外的0个或更多字符%
-尾随百分号使用^{} 查看this demo-6个步骤与30个步骤。
使用
lookahead
。这里需要的是不捕获任何内容的0 width assertion
。相关问题 更多 >
编程相关推荐