什么是控制字符的正则表达式?

问题描述 投票:0回答:2

我正在尝试匹配 \^c 形式的控制字符,其中 c 是控制字符的任何有效字符。我有这个正则表达式,但目前不起作用:

\\[^][@-z]

我认为问题在于插入符(^)是正则表达式解析引擎的一部分。

java regex ascii lexical-analysis
2个回答
11
投票

使用模式

^X
匹配
\^.
形式的 ASCII 文本字符串,仅此而已。将
\^X
形式的 ASCII 文本字符串与模式
\\\^.
进行匹配。您可能希望将该点限制为
[?@_\[\]^\\]
,即
\\\^[A-Z?@_\[\]^\\]
。对于括号内的字符类,读作
[?\x40-\x5F]
更容易,因此
\\\^[?\x40-\x5F]
表示文字反斜杠,后跟文字 CIRCUMFLEX,然后是变成有效控制字符之一的内容。

请注意,这是打印出图案的结果,或者是您从文件中读取的结果。这是您需要传递给正则表达式编译器的内容。如果您将其作为字符串文字,那么您当然必须将每个反斜杠加倍。

`\\\\\\^[?\\x40-\\x5F]"
是的,这看起来很疯狂,但那是因为 Java 不像 Groovy 和 Scala(或者 Perl 和 Ruby)那样直接支持正则表达式。正则表达式工作总是更容易,无需额外的 bbaacckksslllllaasshheesssssess。 :)

如果您有真正的控制字符而不是它们的间接表示,则可以使用

\pC
表示具有 GC=Other 属性的所有文字代码点,或使用
\p{Cc}
表示 GC=Control。


4
投票

检查一下:https://www.regular-expressions.info/nonprint.html。你应该能够使用

© www.soinside.com 2019 - 2024. All rights reserved.