2011-02-01 10 views
1

Rubyでは、含まれている文字列に存在する場合、どの正規表現を削除するのでしょうか?私は文字については/[^abc]/を知っていますが、文字列はどうですか?残りの文字列を残して他の文字列を残す正規表現

私は文字列"group=4&type_ids[]=2&type_ids[]=7&saved=1"を持っており、正規表現のみを使用して文字列に存在する場合、パターンgroup=\dを保持したいとしますか?

現在、私は&に分割し、結果として得られる列挙可能なコレクションに条件=~ /group=\d/を一致させて選択しています。それはうまく動作しますが、これをより直接的に行う正規表現を知りたいと思います。

答えて

2

ここで私が使用する傾向がある二つの方法があります
group_str = str[/group=(\d+)/,1]

場合数字だけを整数として使用したい場合は、

警告:String#[]は一致が発生しなければnilを返す、と盲目的nil.to_iを呼び出す常に0を返します。

+0

ありがとう、それはそれをしました。 – m7d

+0

私より優れたソリューション:-) – sml

1

あなたは試すことができます:

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

Rubyの正規表現に '.'の改行が含まれていないとすれば、これは単一行の文字列に対してのみ機能します。さらに、あなたはRubyではなく_sed_構文のいくつかの種類を含んでいるようです。 (私はあなたにdownvoteをしたい、しかし、私はその日のために外です。) – Phrogz

1

は通常、私は本当に複雑な正規表現についてあまり心配しないでしょう。文字列を小さな部分に分割するだけで簡単になります。

asdf = "group=4&type_ids[]=2&type_ids[]=7&saved=1" 

asdf.split('&').select{ |q| q['group'] } # => ["group=4"] 

そうしないと、正規表現をさまざまな方法で使用できます。あなただけの数字をしたい場合は
part = str[/group=\d+/]

そして、::

asdf.scan(/group=\d+/) # => ["group=4"] 
asdf[/(group=\d+)/, 1] # => "group=4" 
0

試してみてください:

単に
str.match(/group=\d+/)[0] 
関連する問題