- ベストアンサー
正規表現 .+? について
正規表現(egrepコマンド)の .+? とはどのようなパターンを意味するのでしょうか。 例1のケース(.+? の部分)が何故マッチするのかがわかりません。 また、例1, 2のケースは共にマッチしますが、 .+? と .*? の違いは何になるのでしょうか。 例1. echo "tmp/foo.txt" | egrep "tmp.+?/.+?foo[^/]*$" 例2. echo "tmp/foo.txt" | egrep "tmp.*?/.*?foo[^/]*$"
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「?」はPOSIXを含むいわゆる正規表現では0か1回マッチするという意味です ({0,1}とほぼ同意) 最短マッチに使うのはPerl互換ですね 「tmp.+?/」は「tmpに続く『何か1文字以上の文字』が『0回または1回』出現する」 なので「tmp/」にマッチすると考えられます
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
後者の質問については「+ と * の違い」といえば十分だろう. 前者は .+? が「任意の文字からなる 1文字以上の文字列」と言っておけばわかる?
質問者
お礼
回答ありがとうございます。 >前者は .+? が「任意の文字からなる 1文字以上の文字列」と言っておけばわかる? 検索パターンが次ようなイメージでしょうか? tmp<1文字以上の任意文字列>/<1文字以上の任意文字列>foo<...この部分は略...> この場合、検索対象文字列 "tmp/foo.txt" に関して tmp と / の間、/ と foo の間には1文字以上の任意の文字列が存在しないのですが、何故マッチするのでしょうか?
お礼
回答ありがとうございます。 検索すると最短マッチが出てきたので何故マッチするのかわからずにいました。 正規表現にはPOSIXとPerl互換があるのですね。 お陰様ですっきりしました。 改めてありがとうごじました。