一个正则表达式?

LoveSQL 2010-09-27 02:44:24
pattern = Pattern.compile("<td>(.*?)</td>");

谁能给解释一下问号表示啥意思啊?
...全文
131 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
aaa740713995 2010-09-27
这正则还是没学会来着 看了又忘哒
回复
maoxiang_2010 2010-09-27
不知道lz有没有听说过贪婪匹配和非贪婪匹配。
所谓贪婪匹配是指将尽可能多地匹配字符。非贪婪匹配则相反
举个例子吧
贪婪匹配:
String str = "<td>abc</td><td>123</td>";
Matcher matcher = Pattern.compile("<td>(.*)</td>").matcher(str);
matcher.find();
String result = matcher.group(1);
System.out.println(result);
这时的rusult为abc</td><td>123

非贪婪匹配
matcher =Pattern.compile("<td>(.*?)</td>").matcher(str);
matcher.find();
result = matcher.group(1);
System.out.println(result);在表达式中加上?。
这时result结果为abc

所以lz的例子加上?的意思就是指非贪婪匹配。也就是说匹配与<td>最近的</td>标签。这样可以保证td是同一对。没有跨越多个td标签,这样使用matcher.group(1)能够取出同一对td中内容。
回复
thegodofwar 2010-09-27
准确点说:
.*匹配"<td><p>a</p><p>a</p></td><td><p>b</p></td>"
.*?匹配"<td><p>a</p><p>a</p></td>"和"<td><p>b</p></td>"
回复
thegodofwar 2010-09-27
.*是贪婪匹配,.*?最短匹配,e.g: "<td><p>a</p><p>a</p></td><td><p>b</p></td>"
.*匹配"<td><p>a</p><p>a</p></td><td><p>b</p></td>"
.*?匹配"<td><p>a</p><p>a</p></td>"
回复
LoveSQL 2010-09-27
如何给定字符串是 "<td><p>a</p><p>a</p></td><td><p>b</p></td>" 谁能告诉我结果 并解释一下怎么匹配的?
回复
yearnqiao 2010-09-27
[Quote=引用 6 楼 magong 的回复:]
.表示任意一个字符
.*表示任意个任意字符
.*?表示任意个任意字符,但尽量少,字数最少的那个匹配上
[/Quote]

+++1
回复
magong 2010-09-27
.表示任意一个字符
.*表示任意个任意字符
.*?表示任意个任意字符,但尽量少,字数最少的那个匹配上
回复
wei_wxx 2010-09-27
这正则没接触过呢。观望。
回复
xiechunmei13 2010-09-27
不会,观望。。。。
回复
guoyangjie 2010-09-27
嗯?我也不懂!!!
回复
xuyang840117 2010-09-27
在哪里找的 // 这样
回复
zn85600301 2010-09-27
匹配0或1个正好在它之前的那个字符
哎 你就不能百度 Google下
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-09-27 02:44
社区公告
暂无公告