首页 文章

Ruby中的GSUB和Forward Slash用法

提问于
浏览
0

我经常看到使用正斜杠中包含的pattern参数调用gsub函数 . 例如:

>> phrase = "*** and *** ran to the @@@."
>> phrase.gsub(/\*\*\*/, "WOOF")
=> "WOOF and WOOF ran to the @@@."

我想也许它与转义星号有关,但使用单引号和双引号也可以:

>> phrase = "*** and *** ran to the @@@."
>> phrase.gsub('***', "WOOF")
=> "WOOF and WOOF ran to the @@@."

>> phrase.gsub("***", "WOOF")
=> "WOOF and WOOF ran to the @@@."

使用正斜杠只是惯例吗?我错过了什么?

2 回答

  • 0

    您缺少阅读文档:

    模式通常是Regexp;如果作为字符串给出,它包含的任何正则表达式元字符将按字面解释,例如, '\ d'将匹配后跟'd'的反弹,而不是数字 .

    http://ruby-doc.org/core-2.1.4/String.html#method-i-gsub

    换句话说,您可以提供字符串或正则表达式 . 正则表达式可以通过以下几种方式分隔:

    使用/.../和%r 文字以及Regexp :: new构造函数创建Regexp .

    http://ruby-doc.org/core-2.2.2/Regexp.html

    %r 和备用 %r 分隔符的好处是,您通常可以找到一个不会与模式中的字符发生碰撞的分隔符,这会强制转义它们,如示例所示 .

    * 必须被转义,因为它在正则表达式中具有特殊含义,但在字符串中却没有 .

  • 0

    如果需要使用正则表达式,请使用正斜杠 .

    如果您使用 gsub 的字符串参数,它将只进行普通字符匹配 .

    在您的示例中,使用正则表达式时需要使用反斜杠来转义星号,因为星号在正则表达式中具有特殊含义(可选地匹配任意次数) . 使用字符串时不需要它们,因为它们只是完全匹配 .

    在您的示例中,您可能不需要使用正则表达式,因为它是一个简单的模式 . 但是,如果只想在字符串的开头(例如示例中的第一个字符串)中匹配 *** ,那么您可能希望使用正则表达式,例如:

    phrase.gsub(/^\*{3}/, "WOOF")
    

    有关正则表达式的更多信息,请参阅:http://www.regular-expressions.info/ .

    有关在Ruby中使用正则表达式的更多信息,请参阅:http://ruby-doc.org/core-2.2.0/Regexp.html .

    要在Ruby中使用正则表达式,请尝试:http://rubular.com/ .

相关问题