![](/img/trans.png)
[英]Convert a regular expression in a string to a regexp object in ruby
[英]Convert String to Regexp in Ruby
我經常需要將String轉換為Regexp。 對於許多字符串, Regexp.new(string)
就足夠了。 但是,如果string
包含特殊字符,則需要對它們進行轉義:
string = "foo(bar)"
regex = Regexp.new(string) # => /foo(bar)/
!!regex.match(string) # => false
Regexp類有一個很好的方法來轉義所有regex特殊字符: Regexp.escape
。 它的用法如下:
string = "foo(bar)"
escaped_string = Regexp.escape(string) # => "foo\\(bar\\)"
regex = Regexp.new(escaped_string) # => /foo\(bar\)/
!!regex.match(string) # => true
這似乎真的應該是Regexp.new
的默認工作方式。 除了Regexp.new(Regexp.escape(string))
之外,是否還有更好的方法將String轉換為Regexp? 畢竟是 Ruby。
您永遠不需要運行Regexp.new(Regexp.escape(string))
這是因為在Core和StdLib中,幾乎每個采用Regexp的方法也都采用了String(應該這樣做)。
在原始情況下,如果您要嘗試在古怪的字符串big_string
大字符串big_string
與特殊字符(例如"foo(bar)"
匹配,則只需運行big_string.match("foo(bar)")
。
如果您想做一些更奇特的事情,則可能需要同時使用::escape
和::new
,但切勿直接使用。 例如,如果要在古怪的字符串上匹配big_string
,后跟一個單數,我們將運行Regexp.new(Regexp.escape(string) + "\\\\d")
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.