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正则表达式文档?