プロが教える店舗&オフィスのセキュリティ対策術

正規表現で、

(.*?)

(.*)
ってどう違うんですか?

質問者からの補足コメント

  • 通常、*や?は前の文字にかかると思うのですが、何故、(.*?)では後ろの文字にかかるのですか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/01/27 16:51

A 回答 (5件)

No.3様


> (.*?)xxxとすれば「123xxx456xxx789xxx」の「123」がヒットします
> (.*)xxxだと「123xxx456xxx789」がヒットします

質問者様
> *や?は前の文字にかかると思うのですが、何故、(.*?)では後ろの文字にかかるのですか?


後ろの文字ではなく、ちゃんと前の文字にかかっています。

「(.*?)」も「(.*)」も 「任意の文字列」を表しているので
「(.*?)xxx」も「(.*)xxx」も、 「 後ろに、xxxという文字列が続く「任意の文字列」 」という意味になります。

違いは何かというと、
「(.*?)xxx」は「任意の文字列」部分が最も短くなるような状態にマッチ(適合)します。
つまり「任意の文字列」部分が「123」(後ろにxxxが続く)にマッチすることになります。

「(.*)xxx」は「任意の文字列」部分が最も長くなるような状態にマッチします。
つまり「任意の文字列」部分が「123xxx456xxx789」(後ろにxxxが続く)にマッチすることになります。
    • good
    • 0
この回答へのお礼

やっと理解できました。ありがとうございました。

お礼日時:2020/01/27 21:52

> 何故、(.*?)では後ろの文字にかかるのですか?



#3にも書きましたが、最短マッチという考え方です。
    • good
    • 0

いっぱんに「.*?」は後ろに続く文字への最短マッチです



(.*?)xxxとすれば「123xxx456xxx789xxx」の「123」がヒットします
(.*)xxxだと「123xxx456xxx789」がヒットします
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2020/01/27 21:53

(.*)だと出来るだけ長くマッチ。

(.*?)だと出来るだけ短くマッチです。
これら単独で考えると「任意の文字が0文字以上何文字でも」という正規表現なので、(.*)は文字列全体にマッチで、(.*?)は0文字、つまり空文字列にマッチします。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2020/01/27 21:54

ひとくちに「正規表現」といってもその詳細はたくさんあるんですが, どの「正規表現」の話をしてますか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!