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

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

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

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

我使用的是 Ruby 2.7.2

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

【问题讨论】:

    标签: regex ruby


    【解决方案1】:

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

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

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

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

    请参阅Rubular demo

    【讨论】:

    • 谢谢,您的解决方案有效,但我试图了解为什么我的代码不起作用。我想 '。'方括号内只匹配实际的点字符,它失去了它的特殊含义。 "..." =~ /^[.&&[^x]]*$/ 实际匹配。
    • @meschi 因为/[.]/ = /\./,即[.] 只匹配一个点。从点中减去x 没有多大意义。无论如何,. 不匹配“可打印的 ASCII”。 . 匹配除换行符以外的任何字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2014-02-25
    • 2011-01-24
    • 1970-01-01
    • 2021-08-06
    • 2016-07-06
    相关资源
    最近更新 更多