【问题标题】:What is a regular expression for control characters?什么是控制字符的正则表达式?
【发布时间】:2011-06-21 02:16:19
【问题描述】:

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

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

【问题讨论】:

  • 这对我来说没有意义。那里有反斜杠吗?这些是真正的控制字符,还是一些暗示相同的 ASCII 序列?为什么只去 \c@ .. \cZ ?还有其他的,你知道的。
  • 你为什么要把插入符号放在一个字符类中?
  • 我正在尝试匹配控制字符的文字文本,而不是控制字符本身。
  • Control-X 定义为码点为^-ing 码点X 与码点@ 的结果的字符;即位 0x40。

标签: java regex ascii lexical-analysis


【解决方案1】:

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

请注意,这是打印出模式的结果,或者您从文件中读取的内容。这是您需要传递给正则表达式编译器的内容。如果您将其作为字符串文字,您当然必须将每个反斜杠加倍。 `\\\\\\^[?\\x40-\\x5F]" 是的,它看起来很疯狂,但那是因为 Java 不像 Groovy 和 Scala(或者 Perl 和 Ruby)那样直接支持正则表达式。没有额外的 bbaackcksslllllaasshheesssssess,正则表达式的工作总是更容易。 :)

如果您有真正的控制字符而不是它们的间接表示,您可以使用\pC 来表示所有具有属性 GC=Other 的文字代码点,或者使用 \p{Cc} 来表示 GC=Control。

【讨论】:

  • 我不太确定我是否理解 \pC。我正在使用 JLex 编写一个词法分析器,我需要识别字符串中的有效控制字符序列并将它们转换为它们的 ASCII 等价物。例如,字符串“\^g”将打印响铃字符或使计算机扬声器发出哔哔声。我需要一个正则表达式来匹配像“\^g”这样的控制字符序列。
  • @pcman:你是否有一个文字 BACKSLASH 后跟一个文字 CIRCUMFLEX 后跟一个字符是 [A-Z@?\[\]_^] 之一?
  • 是的,我正在尝试匹配文字文本,因为它会出现在字符串中。
【解决方案2】:

看看这个:http://www.regular-expressions.info/characters.html。您应该能够使用 \cA 到 \cZ 来查找控制字符..

【讨论】:

  • 删除 (U+7F) 的 \c? 怎么样?您是否知道 Java 认为 \c{;\c;{?他们忘记检查结果是\p{Cc}。糟糕!
  • 旧链接。该页面仍然存在,但有关\c 的信息已移至regular-expressions.info/nonprint.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2015-07-21
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多