Ruby 正则表达式锚与字符类 && 相结合

Posted

技术标签:

【中文标题】Ruby 正则表达式锚与字符类 && 相结合【英文标题】:Ruby regex anchors combined with character class && 【发布时间】:2021-11-30 14:38:46 【问题描述】:

我正在尝试匹配包含可打印 ascii 的字符串,但不包含一些特殊字符,例如字符“x”。我使用这个正则表达式 /[.&&[^x]]/ 来完成这个任务。

如果整个字符串是由这个字符规范组成的,当尝试匹配时,正则表达式不再匹配。 /^[.&&[^x]]*$/

但是用普通的点试试这个是可行的。 /^.*$/ 匹配我扔给它的每个字符串。

我使用的是 Ruby 2.7.2

正则表达式是在运行时构造的,其他边缘情况需要 /^ ... $/ 锚。

【问题讨论】:

【参考方案1】:

可打印的 ASCII 正则表达式是 [ -~]

要匹配除x 之外的任何可打印ASCII 字符,只需对此类使用字符类减法:[ -~&&[^x]]

要匹配仅包含此类字符的字符串,请使用

/\A[ -~&&[^x]]*\z/

请参阅Rubular demo。

【讨论】:

谢谢,您的解决方案有效,但我试图了解为什么我的代码不起作用。我想 '。'方括号内只匹配实际的点字符,它失去了它的特殊含义。 "..." =~ /^[.&&[^x]]*$/ 实际匹配。 @meschi 因为/[.]/ = /\./,即[.] 只匹配一个点。从点中减去x 没有多大意义。无论如何,. 不匹配“可打印的 ASCII”。 . 匹配除换行符以外的任何字符。

以上是关于Ruby 正则表达式锚与字符类 && 相结合的主要内容,如果未能解决你的问题,请参考以下文章

未记录的 Java 正则表达式字符类:\pC

具有命名捕获支持的 Ruby 正则表达式匹配枚举器

使用 ruby​​ 和正则表达式从字符串中提取键值对

第3章 包装类&正则表达式

python使用正则表达式

2019-05-23 Java学习日记之正则表达式&常用工具类