JAVA正则中的“?”的使用
最近在做一个正则匹配的东西但是在用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>
只是一直不理解‘?’在这里的含义,看来很多文档,似乎在这里解释不通。
特想请教各位,能否给小弟一些解释....... Java 正则 --------------------编程问答-------------------- 你理解错了,这里是这样 。 *?后两个是一起的,叫*非贪婪写法。.你应该懂了,*?遇到下个</li>就会作为一个,然后再找<li></li>这间的,这样用处是分开得到三个<li></li>,不加?从头到尾就一个了 --------------------编程问答-------------------- 在正则表达式里
“*”是0到n次的意思 “?”是0到一次。
补充:Java , Java相关