2012-01-25 16 views
1

これは、{2,Shahar}のようなIDと名前の変数を含むRubyの文字列を解析する必要があります。ruby​​正規表現文字列の繰り返し一致を置換する

文字列は、このようなものです:

text = "Hello {1,Micheal}, my name is {2,Shahar}, nice to meet you!" 

私はそれを解析しようとしている、正規表現は、最初}をスキップし、私はこのような何かを得る:

text.gsub(/\{(.*),(.*)\}/, "\\2(\\1)") 
=> "Hello Shahar(1,Micheal}, my name is {2), nice to meet you!" 

必要resaultしばらくべきbe:

=> "Hello Michael(1), my name is Shahar(2), nice to meet you!" 

私は助けることができる誰にも感謝します。

おかげ シャハル

答えて

1

貪欲.*一致すぎ。これは、「任意の文字列、最大可能長」を意味します。だから、最初の(.*)マッチ1,Micheal}, my name is {2は、その後、コンマはコンマに一致し、第二(.*)マッチShahar(および最終\}一致閉じ括弧。

より良い、より具体的に。たとえば、あなたが唯一できるように試合を制限することができ試合は{...}セクションの範囲を超えて拡張しないことを確実にするために括弧を除く文字:

text.gsub(/\{([^{}]*),([^{}]*)\}/, "\\2(\\1)") 

それともあなたがこれを行うことができます:

text.gsub(/\{([^,]*),([^}]*)\}/, "\\2(\\1)") 
0を

最初の部分はコンマを含まない任意の文字列で、2番目の部分は}を含まない任意の文字列です。

+0

偉大な、私の問題を解決!どうもありがとうございました! – smintz

+0

よろしくお願いします! –

関連する問題