1. ホーム
  2. regex

[解決済み] 最初のマッチで停止する正規表現

2022-01-30 03:19:38

質問

私の正規表現パターンは次のようなものです。

<xxxx location="file path/level1/level2" xxxx some="xxx">

ロケーションに割り当てられた引用符の部分にのみ興味があります。欲張りなスイッチなしで、以下のように簡単にできるはずではありませんか?

/.*location="(.*)".*/

動作しないようです。

解決方法は?

正規表現をlazy/non-greedyにする必要があります。なぜなら、デフォルトでは "(.*)" の全てにマッチします。 "file path/level1/level2" xxx some="xxx" .

その代わり、ドットスターを非貪欲にすることで、できるだけ少ない文字にマッチするようにすることができます。

/location="(.*?)"/

を追加する ? を量詞の上に置いた場合 ( ? , * または + ) を使えば、欲張らない。

注意: これは Perl 5 拡張を実装した正規表現エンジン (Java, Ruby, Python など) でのみ利用可能で、従来の正規表現エンジン (JavaScript, Awk など) では利用できません。 sed , grep なし -P など)。