2011-02-01 176 views
1

在Ruby中,什麼正則表達式將除去所需的字符串,如果存在於包含的字符串?我對字符知道/[^abc]/,但字符串呢?正則表達式保留所需的字符串剩餘和其他刪除

說我有字符串"group=4&type_ids[]=2&type_ids[]=7&saved=1",並希望保留模式group=\d,如果它只出現在字符串中使用正則表達式?

目前,我分裂&,然後做一個匹配條件=~ /group=\d/選擇產生的可枚舉集合。它工作正常,但我想知道正則表達式更直接地做到這一點。

回答

2

簡單:
part = str[/group=\d+/]

如果你只想要的數字,然後:
group_str = str[/group=(\d+)/,1]

如果你只需要數字作爲整數,然後:
group_num = str[/group=(\d+)/,1].to_i

警告:String#[]將返回nil如果出現不匹配,一味呼籲nil.to_i總是返回0

+0

謝謝,那就是了。 – m7d 2011-02-01 21:26:56

1

你可以試試:

$str =~ s/.*(group=\d+).*/\1/; 
+0

鑑於Ruby的正則表達式不包含`.`的換行符,這隻適用於單行字符串。此外,您似乎已經包含某種_sed_語法而不是Ruby。 (我會讓你失望的,但我今天就出去了。) – Phrogz 2011-02-01 15:19:08

1

通常我不會真的擔心太多複雜的正則表達式。只要打破字符串分解成更小的部分,它變得更加容易:

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" 
0

嘗試:

str.match(/group=\d+/)[0] 
相關問題