文字列の各行から 3 つの一致を取得したい:
m&tch1@ match2@ match3canbe&ny7hing
match2@ match3canbe&ny7hing
- 一致 1 は、空白以外であれば何でもかまいません。常に @ で終わるとは限りません。
- マッチ 1 が存在する場合、マッチ 2 とはスペースで区切られます (スペースはマッチの一部ではありません)。
- マッチ 2 は常に通常の単語であり、常に @ で終わります
- マッチ 3 はなんでもあり
したがって、上記から、私は欲しい:
Match 1
1. m&tch1@
2. match2
3. match3canbe&ny7hing
Match 2
1.
2. match2
3. match3canbe&ny7hing
私はこれを思いつきました:/^(\S*@?) ?(\w+)@ +(.+)/
しかし、それは戻ります:
Match 1
1. m&tch1@
2. match2
3. match3canbe&ny7hing
Match 2
1. match
2. 2
3. match3canbe&ny7hing
マッチ 1 は問題ありませんが、マッチ 2 では最初のグループを空にし、2 番目のグループを「match2」にする必要があります。
正規表現だけではできない場合、他の提案はありますか?
UPD: sawaのソリューションは機能しますが、行の前にタブなどを付けると:
prefix m&tch1: match2: match3canbe&ny7hing
prefix match2: match3canbe&ny7hing
次のようにスキャンし/^prefix (\S*)\s+(\S*):\s+(\S+)/
ます。1行だけスキャンします
現在: http://rubular.com/r/expKw59fF2
プレフィックス付き (まだ動作していません): http://rubular.com/r/VWGgU1qNWA