java pattern 正则表达式中的 '+?' 和 '*?' 分别是什么意思

我知道+表示1个到多个*表示0到多个?表示0或者1个但经常看到+?*?这么用,比如:查询<ahref=\"index.html\">index</a>中<ahref></... 我知道
+ 表示 1个到多个
* 表示 0到多个
? 表示0或者1个

但经常看到 +? *? 这么用,比如:

查询
<a
href=\"index.html\">index</a>中
<a
href></a>间的数据,
可写作<a.*href=\".*\">(.+?)</a>

这里小括号提取的内容数量就是用 +? 表示的
这个是什么意思啊, 用 (.+) 匹配 index 难道不能匹配么,只能用 (.+?) 么?
展开
 我来答
丿黯影残舞
推荐于2018-04-05 · 超过15用户采纳过TA的回答
知道答主
回答量:81
采纳率:100%
帮助的人:32.1万
展开全部
  + 表示 1个到多个
  * 表示 0到多个
  ? 表示0或者1个

  *?和+?叫做非贪婪匹配

  +和*表示尽可能多的匹配
  +?和*? 表示尽可能少的匹配

  任意字符的范围,如果要匹配带有连续文本,贪婪匹配会使得中间的内容尽可能长,也就是第一个标签的开头和最后一个标签结尾整个作为一个结果返回。
  如果是非贪婪的,就会把每一个标签作为单独一个结果返回。
albumin
推荐于2016-12-06 · TA获得超过1.2万个赞
知道大有可为答主
回答量:4889
采纳率:87%
帮助的人:2300万
展开全部
普通的+,*表示 尽可能多的匹配

+?,*?多了个问号表示 尽可能 少的匹配

你举的那个例子无论 用什么 结果都 是一样的,假如有以下一行
<a href=\"index.html\">index</a><a href=\"chapter1.html\">chapter1</a>
如果 用<a.*href=\".*\">(.+?)</a>小括号会匹配第二个a href标签里的chapter1
因为a.*href中.*会一直匹配 到 第二个href前面
如果 用<a.*?href=\".*\">(.+)</a>小括号则会匹配 从index到chapter1的所有字符 ,即(.+)从第一个<a href ...>结束 匹配 到 在同一行的最后 一个</a>前面
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式