【发布时间】:2011-09-28 15:00:05
【问题描述】:
:(“冒号”)在正则表达式中有特殊含义,但我需要按原样使用,比如[A-Za-z0-9.,-:]*。
我试图逃避它,但这不起作用[A-Za-z0-9.,-\:]*
【问题讨论】:
-
也许你需要两个反斜杠来转义它?
-
你想匹配什么?
:(“冒号”)在正则表达式中有特殊含义,但我需要按原样使用,比如[A-Za-z0-9.,-:]*。
我试图逃避它,但这不起作用[A-Za-z0-9.,-\:]*
【问题讨论】:
冒号在字符类中没有特殊含义,不需要转义。根据the PHP regex docs,字符类中唯一需要转义的字符如下:
其他所有非字母数字字符 比
\、-、^(开始时)和 终止]是非特殊的 字符类,但它没有害处 如果他们逃脱了。
有关 Java 正则表达式的详细信息,请参阅the docs。
【讨论】:
使用\\: 代替\:.. \ 在java 字符串中有特殊含义。
【讨论】:
: 无论如何都不是正则表达式中的特殊字符。跨度>
在大多数正则表达式实现(包括 Java 的)中,: 没有特殊含义,无论是在字符类内部还是外部。
您的问题很可能是由于- 在您的类中充当范围运算符:
[A-Za-z0-9.,-:]*
其中,-: 匹配',' 和':' 之间的所有ascii 字符。请注意,它仍然与文字 ':' 匹配!
试试这个:
[A-Za-z0-9.,:-]*
通过将- 放在类的开头或结尾,它与文字"-" 匹配。正如 Keoki Zee 在 cmets 中提到的,您也可以在类中转义 -,但大多数人只是在末尾添加它。
一个演示:
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 '-'
}
}
【讨论】:
[a\-z] 转义连字符。
:)
- 的人在字符类中是特殊的,不应该干预正则表达式! :)。不过说真的,是的,您的选择肯定是更安全的选择!
小心,- 与正则表达式有特殊含义。在[] 中,如果放在末尾strong>,您可以毫无问题地放置它。在您的情况下,,-: 被视为 从 , 到 :。
【讨论】: