有一个过滤HTML的正则表达式是这样的"<(.+?)>"

hanyucq123 2009-03-23 11:56:04
+是重复一次或多次,而问是重复0次事1次,我就不懂了,即然用了+,为何还要用?呢?还有那个括号到底是有什么用呢?我把括号取了,好像得到的结果也一样
...全文
70 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2009-03-23
  • 打赏
  • 举报
回复
?表示最小匹配,比如按照你上面的表达式对于下记内容:
<abc>1234</abc><bcd>hahah</bcd>
第一次匹配的结果就是:abc
如果去掉?,匹配的结果就是:abc>1234</abc><bcd>hahah</bcd

()表示匹配的范围。?的作用在于这个括号内。

hanyucq123 2009-03-23
  • 打赏
  • 举报
回复
非常感谢,懂了,学了个30分钟教程,哈哈,里面好像没说到这个
zorou_fatal 2009-03-23
  • 打赏
  • 举报
回复
? 非贪心匹配必备
wackyboy 2009-03-23
  • 打赏
  • 举报
回复
因为 正则表达式是贪婪的 尽可能多的匹配字符
而 . 代表着非换行符的所有字符 
如 <td width="20px"><input type ="button" name="btnName" id="btnName" value=""/></td>
这样的话 我们用<.+> 因为 > 也属于 . 的范畴
所以会将<td width="20px"><input type ="button" name="btnName" id="btnName" value=""/></td> 全部取到
如果我们要取 <td width="20px"> 显然结果是不对的
这样就要将正则的贪婪性德转变成懒惰的 关键字符就是 ?
? 可用于表示重复的 + * ? 之后 使得正则表达式 变成懒惰的 只要有匹配就会返回结果
这样 <.+?> 就会将<td width="20px"> 取到

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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