簡體   English   中英

在Ruby中將字符串轉換為Regexp

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM