Che*_*rry 4 java regex intellij-idea
考虑一下数组:
new Pattern[] {Pattern.compile("\\["),Pattern.compile("\\]") };
Run Code Online (Sandbox Code Playgroud)
Intellij IDEA告诉我这\\是多余的,并告诉我将其替换为]例如结果是:
new Pattern[] {Pattern.compile("\\["),Pattern.compile("]") };
Run Code Online (Sandbox Code Playgroud)
为什么第一个Pattern.compile("\\[")是\\好的,但是第二个是多余的?
Wik*_*żew 11
]如果[在它之前没有相应的非转义符号,则该符号不是字符类之外的特殊正则表达式运算符.只有特殊字符才需要转义.A [是字符类之外的特殊正则表达式运算符(因为它可能标记字符类的起点).一旦Java正则表达式引擎[在模式中看到未转义,它就知道必须有一个]关闭前面的字符类.无论是否逃脱,对发动机都无关紧要.如果[表达式中没有空格,则将]其视为仅仅是文字]符号.因此,[abc]将匹配a,b或c,和/ \[abc]或\[abc\]将匹配[abc]文字字符序列.
因此,[应该始终进行转义,并且]不必在字符类之外进行转义.
当用于一个字符类中,既[和]必须一个Java正则表达式内被转义为它们可形成相交/减法模式.
| 归档时间: |
|
| 查看次数: |
629 次 |
| 最近记录: |