Php 如何:编写要匹配的REGEXP<;李>;具有特定的类属性

Php 如何:编写要匹配的REGEXP<;李>;具有特定的类属性,php,regex,Php,Regex,我需要捕获页面html源中的以下标记+内容: <li class="someClass someClass2"> ... some html code ... </li> ... 一些html代码。。。 我对正则表达式不是很在行,所以我也很欣赏包含优秀教程链接的评论。我一直在退房,但我对那里的解释不太满意 我在上述网站上发现的是smt,如下所示: <li\b[^>]*>(.*?)</li> ]*>(**?) 这匹配所有的标

我需要捕获页面html源中的以下标记+内容:

<li class="someClass someClass2">
    ... some html code ...
</li>
  • ... 一些html代码。。。
  • 我对正则表达式不是很在行,所以我也很欣赏包含优秀教程链接的评论。我一直在退房,但我对那里的解释不太满意

    我在上述网站上发现的是smt,如下所示:

    <li\b[^>]*>(.*?)</li>
    
    ]*>(**?)
    
    这匹配所有的
  • 标记,这不是我想要的。我试着摆弄它,并测试了这个

    <li class="someClass someClass[1-9]{1,1}[0-9]*">(.*?)</li>
    
  • (*
  • 不幸的是,这一个不做的工作。第二个类名的格式是someClassX,其中X来自{1,2,…}(显然,它不是一组自然数:)

    我从这个regexp得到的只是“没有匹配项”。我正在使用Ubuntu、Kodos工具。

    更令人沮丧的是,这个regexp:

    <li class="someClass someClass[1-9]{1,1}[0-9]*">
    
  • 实际上,它捕捉到了开头的
  • 标记,但仅此而已,就好像它被新行字符“分散”了注意力一样

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


    Thx

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

  • (.*\n)*

  • (.*)到底有什么错?(哦,你可以省略
    {1,1}
    )它需要是正则表达式吗?因为HTML不是一种常规语言,您尝试用正则表达式解析它可能会失败。@thejh:我将在上面的Q=)中添加您问题的答案@playcat:然后请查看一下等人(相关)的资料,不幸的是,它没有起到作用。。。它选择从开始li标记到结束li标记的所有内容。。。我在上面描述的两个li标记之间输入了
  • test
  • ,它与其他所有标记一起匹配。@playcat,我稍微编辑了我的答案(在正则表达式末尾添加了一个问号,以使用最小匹配模式而不是最大匹配模式)。这能奏效吗?是的,那一个成功了:)。非常感谢。然而,我非常不鼓励使用正则表达式从HTML文件中获取内容。不过,我确实有兴趣更彻底地学习它们。@playcat看一看和各种答案。它们展示了如何使用现代模式来解析HTML——每个人都知道——您可能只应该对特定的HTML而不是一般的HTML进行解析。否则,它会变得太麻烦,无法正确处理;大多数人都不会成功。
    <li class="someClass someClass[0-9]+">(.*\n)*?</li>