最初の一致で停止する正規表現 質問する

最初の一致で停止する正規表現 質問する

私の正規表現パターンは次のようになります

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

私が興味があるのは、location に割り当てられた引用符で囲まれた部分だけです。貪欲なスイッチを使わずに、以下のように簡単にできるのではないでしょうか?

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

動作しないようです。

ベストアンサー1

"(.*)"デフォルトでは はすべてに一致するため、正規表現を lazy/non-greedy にする必要があります"file path/level1/level2" xxx some="xxx"

代わりに、ドットとスターを非貪欲にすることができます。これにより、一致する文字ができるだけ少なくなります。

/location="(.*?)"/

?量指定子 ( ?*または) に を追加すると、+非貪欲になります。

注意: これは、Perl 5 拡張機能を実装する正規表現エンジン (Java、Ruby、Python など) でのみ使用可能であり、「従来の」正規表現エンジン (のないAwk sed、などを含む) では使用できません。grep-P

おすすめ記事