JAVA正则中的“?”的使用

edione1988 2013-07-04 04:37:32
最近在做一个正则匹配的东西
但是在用JAVA正则的时候,沿用了之前的人的写法
比如匹配如下的一段html代码,要一次遍历所有的<li></li>
<ul>
<li><label>描述相符</label>4.7
<em class="green">低于同行0.83%</em>
</li>
<li><label>服务态度</label>4.8
<em class="green">低于同行0.63%</em>
</li>
<li><label>发货速度</label>4.7
<em class="green">低于同行0.99%</em>
</li>
</ul>


之前的人用的是:<li>.*?</li>

JAVA代码如下:
String bran = "<li>.*?</li>";
Pattern patt = Pattern.compile(bran);
Matcher mat = patt.matcher(brands);
while(mat.find()){
String brandstr = mat.group();
System.out.println(brandstr);
}


可以打印以下结果:
<li><label>描述相符</label>4.7  <em class="green">低于同行0.83%</em> </li>
<li><label>服务态度</label>4.8 <em class="green">低于同行0.63%</em></li>
<li><label>发货速度</label>4.7<em class="green">低于同行0.99%</em></li>


只是一直不理解‘?’在这里的含义,看来很多文档,似乎在这里解释不通。
特想请教各位,能否给小弟一些解释.......
...全文
78 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
java小菜鸟s 2013-07-07
  • 打赏
  • 举报
回复
在正则表达式里 “*”是0到n次的意思 “?”是0到一次。
花木兰1闪21A 2013-07-04
  • 打赏
  • 举报
回复
你理解错了,这里是这样 。 *?后两个是一起的,叫*非贪婪写法。.你应该懂了,*?遇到下个</li>就会作为一个,然后再找<li></li>这间的,这样用处是分开得到三个<li></li>,不加?从头到尾就一个了

50,531

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧