我正在尝试匹配\ ^ c形式的控制字符,其中c是控制字符的任何有效字符。我有这个正则表达式,但它目前无效:\\[^][@-z]
我认为问题在于插入符号(^)是正则表达式解析引擎的一部分。
答案 0 :(得分:7)
使用模式^X
匹配\^.
形式的ASCII文本字符串,仅此而已。将\^X
形式的ASCII文本字符串与模式\\\^.
匹配。您可能希望将该点限制为[?@_\[\]^\\]
,因此\\\^[A-Z?@_\[\]^\\]
。对于括号中的字符类,它更容易被读作[?\x40-\x5F]
,因此\\\^[?\x40-\x5F]
用于文字BACKSLASH,后跟文字CIRCUMFLEX,后跟变成有效控制字符之一的东西。
请注意,这是打印出模式或从文件中读取的内容的结果。这是你需要传递给正则表达式编译器。如果你把它作为一个字符串文字,你当然必须加倍每个反斜杠。 `\\\\\\^[?\\x40-\\x5F]"
是的,这看起来很疯狂,但那是因为Java不直接支持正则表达式,如Groovy和Scala - 或Perl和Ruby - 。没有额外的bbaacckksslllllaasshheesssssess,正则表达式的工作总是更容易。 :)
如果你有真正的控制字符而不是间接表示它们,你可以使用\pC
表示所有文字代码点,其属性为GC = Other,或\p{Cc}
仅用于GC = Control。
答案 1 :(得分:2)
检查出来:http://www.regular-expressions.info/characters.html。您应该能够使用\ cA到\ cZ来查找控制字符..