在Ruby中,什麼正則表達式將除去所需的字符串,如果存在於包含的字符串?我對字符知道/[^abc]/
,但字符串呢?正則表達式保留所需的字符串剩餘和其他刪除
說我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"
,並希望保留模式group=\d
,如果它只出現在字符串中使用正則表達式?
目前,我分裂&
,然後做一個匹配條件=~ /group=\d/
選擇產生的可枚舉集合。它工作正常,但我想知道正則表達式更直接地做到這一點。
在Ruby中,什麼正則表達式將除去所需的字符串,如果存在於包含的字符串?我對字符知道/[^abc]/
,但字符串呢?正則表達式保留所需的字符串剩餘和其他刪除
說我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1"
,並希望保留模式group=\d
,如果它只出現在字符串中使用正則表達式?
目前,我分裂&
,然後做一個匹配條件=~ /group=\d/
選擇產生的可枚舉集合。它工作正常,但我想知道正則表達式更直接地做到這一點。
簡單:
part = str[/group=\d+/]
如果你只想要的數字,然後:
group_str = str[/group=(\d+)/,1]
如果你只需要數字作爲整數,然後:
group_num = str[/group=(\d+)/,1].to_i
警告:String#[]
將返回nil
如果出現不匹配,一味呼籲nil.to_i
總是返回0
。
你可以試試:
$str =~ s/.*(group=\d+).*/\1/;
鑑於Ruby的正則表達式不包含`.`的換行符,這隻適用於單行字符串。此外,您似乎已經包含某種_sed_語法而不是Ruby。 (我會讓你失望的,但我今天就出去了。) – Phrogz 2011-02-01 15:19:08
通常我不會真的擔心太多複雜的正則表達式。只要打破字符串分解成更小的部分,它變得更加容易:
asdf = "group=4&type_ids[]=2&type_ids[]=7&saved=1"
asdf.split('&').select{ |q| q['group'] } # => ["group=4"]
否則,您可以使用正則表達式一大堆不同的方式。這裏有兩種方法我傾向於使用:
asdf.scan(/group=\d+/) # => ["group=4"]
asdf[/(group=\d+)/, 1] # => "group=4"
嘗試:
str.match(/group=\d+/)[0]
謝謝,那就是了。 – m7d 2011-02-01 21:26:56