一个正则表达式?

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

谁能给解释一下问号表示啥意思啊?
...全文
186 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
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下

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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