我经常看到使用正斜杠中包含的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 @@@."
使用正斜杠是否只是惯例?我错过了什么?
答案 0 :(得分: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/。
答案 1 :(得分:0)
您缺少阅读文档:
该模式通常是Regexp;如果作为字符串给出,它包含的任何正则表达式元字符将按字面解释,例如, ' \ d'将匹配后跟'd'的反弹,而不是数字。
http://ruby-doc.org/core-2.1.4/String.html#method-i-gsub
换句话说,您可以提供字符串或正则表达式。正则表达式可以用几种方式分隔:
使用/.../和%r {...}文字以及Regexp :: new构造函数创建正则表达式。
http://ruby-doc.org/core-2.2.2/Regexp.html
%r
和其他%r
分隔符的好处是,您通常可以找到一个不会与模式中的字符发生冲突的分隔符,这样会强制转义它们,就像在您的例。
*
必须进行转义,因为它在正则表达式中具有特殊含义,但在字符串中却没有。