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 正则表达式锚与字符类 && 相结合的主要内容,如果未能解决你的问题,请参考以下文章