java - 正则捕捉中(.*?)和(.*)的区别
伊谢尔伦
伊谢尔伦 2017-04-18 10:55:01
0
5
623

Java使用正则匹配捕捉
1 Pattern p = Pattern.compile("name="sign" value="(.*)"/>");
2 Pattern p = Pattern.compile("name="sign" value=*"(.?)**"/>");
第二个比第一个多了一个?号,请问其中区别是什么

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(5)
伊谢尔伦

貪欲な人とそうでない人の違い。

簡単に言うと、非貪欲とは、後に別の一致があるかどうかに関係なく、一致すると停止することを意味し、貪欲とは、後で一致がある限り停止しないことを意味します。

いいねを押す +0
Peter_Zhu

正規表現に繰り返しを受け入れる修飾子が含まれている場合、通常の動作は、できるだけ多くの文字と一致します (式全体が一致する場合もあります)。次の式を例に挙げます: a.*b。これは、a で始まり b で終わる最長の文字列と一致します。これを使用して aabab を検索すると、文字列 aabab 全体と一致します。これを貪欲マッチングと呼びます。
場合によっては、遅延マッチング、つまりできるだけ少ない文字のマッチングが必要になることがあります。上記の修飾子は、後ろに疑問符 ? を追加することで遅延マッチング パターンに変換できます。このように、.*? は、任意の数の繰り返しをマッチングすることを意味しますが、全体のマッチングが成功するよう、最小限の繰り返しを使用します。次に、例の遅延バージョンを見てみましょう:
a.*?b は、a で始まり b で終わる最も短い文字列と一致します。 aabab に適用すると、aab (文字 1 ~ 3) と ab (文字 4 ~ 5) に一致します。

コピー元: http://deerchao.net/tutorials... 正規表現の 30 分入門、貪欲で怠惰な部分

いいねを押す +0
洪涛

前者は一致を見つけた後に停止しますが、後者は一致するターゲットをすべて見つけます。

いいねを押す +0
小葫芦

この質問には、正規表現における貪欲モードと遅延モード (非貪欲モードとも呼ばれる) が含まれます
まず、これら 2 つの定義を見てみましょう

  1. 貪欲モードと最大マッチング*,+,'{n,}',.*は両方とも貪欲モードです、いわゆる最大マッチングです。例を示します

。 リーリー
  1. 怠惰モードでは、マッチングが成功することを前提として、できるだけ少ない回数でマッチングします。
    引き続き上記の例:

リーリー
いいねを押す +0
刘奇

?一致する最小のものが選択されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート