【问题标题】:HOWTO: compose REGEXP to match <li> with certain class attr如何:编写正则表达式以匹配 <line> 与某些类属性
【发布时间】:2010-11-20 15:13:11
【问题描述】:

我需要在页面的html源代码中捕获以下标签+内容:

<li class="someClass someClass2">
    ... some html code ...
</li>

我不太擅长正则表达式,所以我也会感谢包含指向一个好教程的链接的 cmets。我一直在检查http://www.regular-expressions.info/,但我对那里的解释不太满意。

我在上面的网站上发现的 smt 是这样的:

<li\b[^>]*>(.*?)</li>

这匹配所有&lt;li&gt; 标签,这不是我想要的。我试着弄乱它,并测试了这个

<li class="someClass someClass[1-9]{1,1}[0-9]*">(.*?)</li>

不幸的是,这个也不能胜任这项工作。第二个类名的格式为 someClassX,其中 X 来自 {1, 2, ... }(嗯,很明显,它不是一组自然数 :))

我从这个正则表达式中得到的只是“不匹配”。我正在使用 Ubuntu,Kodos 工具。

更郁闷的是这个正则表达式:

<li class="someClass someClass[1-9]{1,1}[0-9]*">

实际上捕捉到了开头的&lt;li&gt; 标签,但仅此而已,就好像它被换行符“分心”了一样。

我仍在谷歌上寻找解决方案,如果找到我会在这里发布,但我也非常感谢一些有用的输入:)

谢谢

【问题讨论】:

  • &lt;li class="someClass someClass[1-9]{1,1}[0-9]*"&gt;(.*?)&lt;/li&gt; 到底有什么问题? (哦,你可以忽略{1,1}
  • 需要是正则表达式吗?因为 HTML 不是常规语言,您尝试使用正则表达式解析它可能会失败。
  • @thejh:我会在上面的 Q =) 中添加你的问题的答案
  • @playcat:那请看stackoverflow.com/questions/3650125/…等人。

标签: php regex


【解决方案1】:

这个正则表达式可以满足您的需求(至少在 Kodos 中......您的里程可能会有所不同!)

<li class="someClass someClass[0-9]+">(.*\n)*?</li>

【讨论】:

  • 不幸的是,它没有做这项工作......它选择了从开始 li 标签到结束 li 标签的所有内容......我在上面描述的两个 li 标签之间输入了&lt;li&gt;test&lt;/li&gt;,并且它与其他所有内容相匹配。
  • @playcat,我稍微编辑了我的答案(在正则表达式的末尾添加了一个问号,以消耗最小而不是最大匹配模式)。这样做有用吗?
  • 是的,那个人完成了这项工作:)。谢谢!但是,我非常不鼓励使用正则表达式从 HTML 文件中获取内容。但是,我确实有兴趣更彻底地学习它们。
  • @playcat 看看this question 和各种答案。他们展示了虽然当然可以使用现代模式来解析HTML——众所周知——你可能应该只对特定的HTML这样做,而不是通用的HTML。否则,做对就太麻烦了;大多数人从不管理。
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多