「TEST(10,20,30)」のような文字列がある場合、この文字列から 10 だけを取り出すにはどうすればよいでしょうか。
私が試してみました
/\(([^\)]+)\)/
それは括弧の内側を取得しますが、コンマを追加しようとすると、たとえば
/\(([^\),]+)\)/
その後、何も一致しません。
この場合、拾いたい部分のパターンは、捨てたい部分のパターンよりもはるかに単純です。
"TEST(10,20,30)"[/\d+/] # => 10
これは、カンマと閉じ括弧の間のものも一致するように正規表現に指示する必要があるためです (または省略します)。
/\(([^),]+)/
また
/\(([^),]+)[^)]*\)/
ご覧のとおり、文字クラス内の括弧をエスケープする必要もありません。
これが正しい方向にあなたを導くことができることを願っています:
irb(main):001:0> str = "TEST(10,20,30)"
=> "TEST(10,20,30)"
irb(main):002:0> str =~ /\w+\(([^,]+),.+\)/
=> 0
irb(main):003:0> $~[1]
=> "10"
正規表現はこれを行います:
\ w +
1つ以上の単語文字( "TEST")
(([^、] +)
コンマ以外のグループ。これは、左の括弧からコンマまでのすべてに一致します。
正規表現の残りの部分は他のパラメーターを無視しますが、それらを別々のグループに含めるように変更することができます。