编程语言
首页 > 编程语言> > java-的正则表达式排除引号内的匹配项

java-的正则表达式排除引号内的匹配项

作者:互联网

我正在从事这个相当大的重构项目,并且正在使用intellij的带正则表达式的查找/替换来帮助我.

这是我正在使用的正则表达式:

\b(?<!\.)Units(?![_\w(.])\b

我发现大多数对我没有用的匹配项是用引号引起来的匹配项,例如:“ units”

我想找到一种方法,使上面的表达式在引号之间找到匹配的字符串时不匹配…

事先感谢,这个地方真棒!

解决方法:

假设引号始终在给定的行上配对,则可以在引号之前和之后创建偶数个匹配项,并确保整行都匹配:

^([^"]*("[^"]*")*[^"]*)*\b(?<!\.)Units(?![_\w(.])\b([^"]*("[^"]*")*[^"]*)*$

这行得通,因为片段

([^"]*("[^"]*")*[^"]*)*

只匹配成对的引号.通过添加开始和结束行锚点,它会强制将正则表达式左侧和右侧的引号计算为偶数.

这将无法正确处理嵌入的转义引号,并且多行引号引起的字符串将很麻烦.

标签:intellij-idea,java,regex,jsp,refactoring
来源: https://codeday.me/bug/20191210/2102449.html