:
(“冒号”)在regexp中有特殊含义,但我需要按原样使用它,如[A-Za-z0-9.,-:]*
。
我试图逃避它,但这不起作用[A-Za-z0-9.,-\:]*
答案 0 :(得分:94)
在大多数正则表达式实现(包括Java)中,:
在字符类的内部和外部都没有特殊含义。
您的问题很可能是因为-
充当您班级中的范围运算符:
[A-Za-z0-9.,-:]*
其中,-:
匹配','
和':'
之间的所有ascii字符。请注意,它仍然与文字':'
匹配!
请改为尝试:
[A-Za-z0-9.,:-]*
将-
放在课程的开头或结尾,它与文字"-"
相匹配。正如Keoki Zee的评论中所提到的,你也可以逃避课堂上的-
,但大多数人只是在最后添加它。
演示:
public class Test {
public static void main(String[] args) {
System.out.println("8:".matches("[,-:]+")); // true: '8' is in the range ','..':'
System.out.println("8:".matches("[,:-]+")); // false: '8' does not match ',' or ':' or '-'
System.out.println(",,-,:,:".matches("[,:-]+")); // true: all chars match ',' or ':' or '-'
}
}
答案 1 :(得分:9)
注意,-
与regexp有特殊含义。在[]
中,您可以毫无疑问地将其置于(如果它放在最后)。在您的情况下,,-:
被视为从,
到:
。
答案 2 :(得分:4)
Colon在字符类中没有特殊含义,不需要转义。根据{{3}},字符类中唯一需要转义的字符如下:
其他所有非字母数字字符 比
\
,-
,^
(一开始)和。{ 终止]
是非特殊的 字符类,但它没有坏处 如果他们逃脱了。
有关Java正则表达式的更多信息,请参阅the PHP regex docs。
答案 3 :(得分:1)
使用\\:
代替\:
.. \
在java字符串中具有特殊含义。