Ruby中的GSUB和Forward Slash用法

时间:2015-05-22 21:33:02

标签: ruby gsub

我经常看到使用正斜杠中包含的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 :(得分: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分隔符的好处是,您通常可以找到一个不会与模式中的字符发生冲突的分隔符,这样会强制转义它们,就像在您的例。

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