我正在尝试匹配\^c 形式的控制字符,其中 c 是控制字符的任何有效字符。我有这个正则表达式,但它目前不起作用:\\[^][@-z]
我认为问题在于插入符号 (^) 是正则表达式解析引擎的一部分。
最佳答案
使用模式 \^.
匹配 ^X
形式的 ASCII 文本字符串,仅此而已。将 \^X
形式的 ASCII 文本字符串与模式 \\\^.
匹配。您可能希望将该点限制为 [?@_\[\]^\\]
,因此 \\\^[A-Z?@_\[\]^\\]
。对于括号内的字符类,更容易读作 [?\x40-\x5F]
,因此对于文字 BACKSLASH,读作 \\\^[?\x40-\x5F]
,后跟文字 CIRCUMFLEX,后跟变成有效控制字符之一的内容。
请注意,这是打印出模式的结果,或者是您从文件中读取的结果。这是您需要传递给正则表达式编译器的内容。如果您将它作为字符串文字,您当然必须将每个反斜杠加倍。 `\\\\\\^[?\\x40-\\x5F]"
是的,它看起来很疯狂,但那是因为 Java 不像 Groovy 和 Scala — 或 Perl 那样直接支持正则表达式和 Ruby — 做。没有额外的 bbaacckksslllllaassshheesssssess,正则表达式的工作总是更容易。:)
如果您有真正的控制字符而不是它们的间接表示,您将使用 \pC
来表示所有具有属性 GC=Other 的文字代码点,或 \p{Cc}
仅用于 GC=Control。
关于java - 什么是控制字符的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893759/