我经常看到使用正斜杠中包含的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 回答
您缺少阅读文档:
http://ruby-doc.org/core-2.1.4/String.html#method-i-gsub
换句话说,您可以提供字符串或正则表达式 . 正则表达式可以通过以下几种方式分隔:
http://ruby-doc.org/core-2.2.2/Regexp.html
%r
和备用%r
分隔符的好处是,您通常可以找到一个不会与模式中的字符发生碰撞的分隔符,这会强制转义它们,如示例所示 .*
必须被转义,因为它在正则表达式中具有特殊含义,但在字符串中却没有 .如果需要使用正则表达式,请使用正斜杠 .
如果您使用
gsub
的字符串参数,它将只进行普通字符匹配 .在您的示例中,使用正则表达式时需要使用反斜杠来转义星号,因为星号在正则表达式中具有特殊含义(可选地匹配任意次数) . 使用字符串时不需要它们,因为它们只是完全匹配 .
在您的示例中,您可能不需要使用正则表达式,因为它是一个简单的模式 . 但是,如果只想在字符串的开头(例如示例中的第一个字符串)中匹配
***
,那么您可能希望使用正则表达式,例如:有关正则表达式的更多信息,请参阅:http://www.regular-expressions.info/ .
有关在Ruby中使用正则表达式的更多信息,请参阅:http://ruby-doc.org/core-2.2.0/Regexp.html .
要在Ruby中使用正则表达式,请尝试:http://rubular.com/ .