如何在正则表达式中键入“:”(“冒号”)?

时间:2011-07-05 08:38:13

标签: java regex

:(“冒号”)在regexp中有特殊含义,但我需要按原样使用它,如[A-Za-z0-9.,-:]*。 我试图逃避它,但这不起作用[A-Za-z0-9.,-\:]*

4 个答案:

答案 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字符串中具有特殊含义。