アプリ版:「スタンプのみでお礼する」機能のリリースについて

正規表現で記述する時「(.*?)」もしくは「(.+?)」という記述を見ますが
「(.*)」や「(.+)」ではダメなのでしょうか?
「?」が付かなくても問題ないのではと思いますが、
「?」が付く場合と付かない場合との違いが判りません。
その問題点と、違いを教えてください。

A 回答 (3件)

正規表現の構文


https://msdn.microsoft.com/ja-jp/library/cc39202 …

?:ほかの修飾子 (*, +, ?, {n}, {n,}, {n,m}) の直後に指定すると、一致パターンを制限することができます。
既定のパターンでは、できるだけ多数の文字列と一致するのに比べて、制限されたパターンでは、できるだけ少ない文字列と一致します。
たとえば、文字列 "oooo" に対して、'o+?' を指定すると 1 つの "o" と一致し、'o+' を指定するとすべての 'o' と一致します。
    • good
    • 0
この回答へのお礼

コンパクトで的確な例を示していただき、ありがとうございます。
すごく納得できました。

お礼日時:2017/05/10 09:55

最短一致と最長一致


http://php-web.net/regular/matching.html
http://www.megasoft.co.jp/mifes/seiki/about.html

「?」で最短一致だと明示しないと、同じ文字が行内にある場合などにて
一番最初と一番最後の範囲と一致することになります。

質問文の例だと
> 正規表現で記述する時「(.*?)」もしくは「(.+?)」という記述を見ますが
において、明示しない場合の「.*」にした場合には
 「(.*?)」もしくは「(.+?)」
の範囲と一致してしまいます(一つの塊となってしまう)。
最短一致を明示すれば
 「(.*?)」
 「(.+?)」
が別々に一致する(二つの)対象となります。

No.1の回答にあるように、同じ文字が続くような場合にも利用しますが、
タグを処理するときなどに最長一致だと、処理範囲が希望している範囲
以上に広がる可能性があるということです。
    • good
    • 0
この回答へのお礼

最短マッチですね。
詳しく説明していただきありがとうございます。

お礼日時:2017/05/10 09:57

*?や+?は最短マッチなので?なしだとヒットするものが変わってくる可能性があります

    • good
    • 0
この回答へのお礼

どうやら最短マッチの時ですね。
ありがとうございます

お礼日時:2017/05/10 09:56

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