我工作2例部分匹配一個Ruby字符串:方式使用正則表達式
假設我有那些變種:
a = "hello"
b = "hello-SP"
c = "not_hello"
任何部分匹配
我想接受任何字符串裏面有變量a
,所以b
和c
會匹配。帶圖案匹配
我想匹配了a
內的字符串,然後'-'
,所以b
將匹配,c
沒有。
我有問題,因爲我一直使用的語法/expression/
定義的正則表達式,所以如何動態地對Ruby的定義正則表達式?
我工作2例部分匹配一個Ruby字符串:方式使用正則表達式
假設我有那些變種:
a = "hello"
b = "hello-SP"
c = "not_hello"
任何部分匹配
我想接受任何字符串裏面有變量a
,所以b
和c
會匹配。
帶圖案匹配
我想匹配了a
內的字符串,然後'-'
,所以b
將匹配,c
沒有。
我有問題,因爲我一直使用的語法/expression/
定義的正則表達式,所以如何動態地對Ruby的定義正則表達式?
您可以使用相同的語法的正則表達式使用變量,所以:
reg1 = /#{a}/
會匹配任何包含a
變量的值(當時的表達是創建!)和
reg2 = /#{a}-/
會做同樣的事,再加上一個連字符,所以hello-
在你的例子中。
編輯:韋恩·康拉德指出,如果a
包含「將在正則表達式特殊含義的任何字符,」你需要躲避他們的。例如:
a = ".com"
b = Regexp.new(Regexp.escape(a))
"blah.com" =~ b
晚發表評論,但我沒能找到我一直在尋找答案,提到上面for.The沒有幫助me.Hope它幫助別人新的紅寶石誰只是想速戰速決。
紅寶石代碼:
st = "BJ's Restaurant & Brewery"
#take the string you want to match into a variable
m = (/BJ\'s/i).match(string) #(/"your regular expression"/.match(string))
# m has the match #<MatchData "BJ's">
m.to_s
# this will display the match
=> "BJ's"
另一種選擇是使用Regexp.new,即'REG2 = Regexp.new( 「#{A} - 」)'。 – 2010-04-28 18:11:19
@格雷姆坎貝爾,是的,但這是更多的字母:) – 2010-04-28 18:56:54
如果'a'可能有任何正則表達式元字符(週期,明星等),然後將其包裝在'Regexp.escape'的調用中。 – 2010-04-29 13:51:06