我經常需要將字符串轉換爲正則表達式。對於很多字符串,Regexp.new(string)
就足夠了。但是,如果string
包含特殊字符,它們需要進行轉義:將字符串轉換爲Ruby中的正則表達式
string = "foo(bar)"
regex = Regexp.new(string) # => /foo(bar)/
!!regex.match(string) # => false
RegExp類有一個很好的方式來逃避那些特別的正則表達式中的所有字符: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))
之外,還有更好的方法將字符串轉換爲正則表達式嗎?畢竟,這個是紅寶石。
'Regexp.new'不應該這樣工作,因爲不能使用「特殊的」正則表達式然後。另外,我認爲'包括'也會做同樣的工作。檢查[*如何檢查一個字符串是否包含Ruby中的子字符串?](http://stackoverflow.com/questions/8258517/how-to-check-whether-a-string-contains-a-substring-in- ruby) –
'String :: include?'是匹配'String'與另一個'String'的最佳方式,但我不認爲它可以輸出'Regexp'。不過,我購買了關於'Regexp.new'的觀點。 –
問題是,你根本不需要一個'Regexp'來檢查字符串是否存在於另一個'String'裏面。這是多餘的複雜/開銷。 –