0

私はこの正規表現がURLで実行されるのを見ました:

$url = 'http://www.domain.com/';
preg_match('/(http)(.*?)\n/', $url, $matches);

疑問符「?」の使い方がわかりません。この正規表現にあります。正規表現のマニュアルによると、「?」{0,1}と同等のメタ文字です。では、「」を持つことのポイントは何ですか?*の後*はすでに{0、}を表しているので

誰かが私を教えてくれませんか。ありがとう。

4

2 に答える 2

6

別の数量詞に従う場合は、意味が異なります。

この場合、先行する数量詞のマッチング動作が変更されます。デフォルトの動作は貪欲であり、?それを「貪欲でない」に変更します。

  • 「貪欲」とは、可能な限り一致することを意味します

  • 「貪欲でない」とは、一致が可能な限り少ないことを意味します

regular-expression.infoの記事を参照してください

例えば:

a.+baabxbの「aabxb」と一致します

a.+?baabxbの「aab」のみに一致します

正規表現の例を参照してください

このトピックに関する私のブログ投稿に興味があるかもしれません:あなたは数量詞を知っています。本当に?

正規表現について

preg_match('/(http)(.*?)\n/', $url, $matches);

ここでは違いはないと思います。デフォルトでは改行文字以外に.一致します(これは、終了正規表現区切り文字の後に追加することで変更できますs)。したがって、疑問符があるかどうかに関係なく、最初の文字までしか一致しません\n

を使用して動作を変更するpreg_match('/(http)(.*?)\n/s', $url, $matches);と、違いが生じます。.*\n最後まで一致し、最初で停止し\nます。.*?\n\n

于 2012-11-05T07:48:59.760 に答える
1

この場合、疑問符は「けちな」一致を意味します。最初に遭遇するとすぐにマッチングを停止\nしますが、そうでない場合は\n、最後まで介在するsをむさぼり食います。

貪欲でけちなマッチングの詳細については、http://www.perl.com/doc/FMTEYEWTK/regexps.htmlをご覧ください。

于 2012-11-05T07:47:28.913 に答える