Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何键入“:&引用;regexp中的(“冒号”)?_Java_Regex - Fatal编程技术网

Java 如何键入“:&引用;regexp中的(“冒号”)?

Java 如何键入“:&引用;regexp中的(“冒号”)?,java,regex,Java,Regex,:(“冒号”)在regexp中有特殊的含义,但我需要按原样使用它,就像[a-Za-z0-9.,-:]*。 我已尝试转义它,但这不起作用。[A-Za-z0-9.,-\:]*冒号在字符类中没有特殊意义,不需要转义。根据,字符类中唯一需要转义的字符如下: 所有非字母数字字符,其他 比\,-,^(在开头)和 终止]在 字符类,但它没有害处 如果他们逃脱了 有关Java正则表达式的更多信息,请参见。使用\\:而不是\:。。\在java字符串中有特殊含义。在大多数正则表达式实现(包括java)中,:在字符类

(“冒号”)在regexp中有特殊的含义,但我需要按原样使用它,就像
[a-Za-z0-9.,-:]*

我已尝试转义它,但这不起作用。
[A-Za-z0-9.,-\:]*

冒号在字符类中没有特殊意义,不需要转义。根据,字符类中唯一需要转义的字符如下:

所有非字母数字字符,其他 比
\
-
^
(在开头)和 终止
]
在 字符类,但它没有害处 如果他们逃脱了


有关Java正则表达式的更多信息,请参见。

使用
\\:
而不是
\:
。。
\
在java字符串中有特殊含义。

在大多数正则表达式实现(包括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 '-'
    }
}

小心,
-
对regexp有特殊的含义。在
[]
中,如果将其放在末尾,则可以毫无问题地将其放置。在你的例子中,
,-:

也许你需要两个反斜杠来转义它?你想匹配什么?你也可以用反斜杠来转义连字符,
[a \-z]
@Keoki:是的,尽管我发现这样做更清楚(Java字符串文本中的双转义!)尽可能多。不过,值得一提的是,也可以转义。将连字符放在末尾可能是以前的程序员所做的,这导致了这个错误。我总是转义:结束循环
:)
@Kobi,不知道
-
的人在字符类中很特别,不应该干预正则表达式!:)。说真的,是的,你的选择肯定更安全@巴特基说的没错,但这也是人们来学习的地方。我发现自己出现在这里的主要原因是因为我在捕获冒号时遇到困难,尽管我的问题不一样,但答案帮助我找到了答案。虽然反斜杠确实是Java字符串中的转义字符,但在这里转义反斜杠并不能解决问题,因为
在正则表达式中不是一个特殊的字符。我不明白为什么会有人投反对票,有人能解释一下这个答案可能有什么问题吗?我没有投反对票,但可能是因为你在Java正则表达式问题中链接了PHP正则表达式文档?