【问题标题】:Regex: match all html tags on line before line break正则表达式:在换行之前匹配所有 html 标签
【发布时间】:2011-12-27 00:03:36
【问题描述】:

我正在把头发拉到这个上面。我想获取 标签中的所有内容,我的 html 结构如下所示:

<ul>
  <li><a href="#">One</a></li>
  <li><a href="#">Two</a></li>
  <li><a href="#">Three</a></li>
</ul>

还有我的正则表达式:

/<a ?.*>(.*?)<\/a>/

当cms没有输出带有换行符的

  • 时,就会出现问题:
    <ul>
      <li><a href="#">One</a></li><li><a href="#">Two</a></li>
      <li><a href="#">Three</a></li>
    </ul>
    

    这是匹配数组的一些示例输出:

    Array
    (
        [0] => Array
            (
                [0] => <a href="/schools/early-years-groups" class="active">Early Years Groups</a></li><li class="leaf first menu-mlid-20328 order_early_years_stuff"><a href="#" title="Order Schools Stuff">Order Early Years Stuff</a>
                [1] => <a href="/schools/early-years-groups/fundraise" title="Fundraise">Fundraise</a>
                [2] => <a href="/schools/early-years-groups/ey-showcase" title="Early Years Showcase">Early Years Showcase</a>
                [3] => <a href="/schools/how-to-pay-your-money-in" title="">How To Pay Your Money In</a>
                [4] => <a href="/schools/early-years-groups/learning-activities" title="Learning Activities">Learning Activities</a>
            )
    
        [1] => Array
            (
                [0] => Order Early Years Stuff
                [1] => Fundraise
                [2] => Early Years Showcase
                [3] => How To Pay Your Money In
                [4] => Learning Activities
            )
    
    )
    

    非常感谢您的帮助,这让我发疯了!

  • 【问题讨论】:

    标签: php html regex


    【解决方案1】:

    问题是你在寻找 &gt; 时使用了贪婪搜索,而它应该是惰性的。这是一个例子:

    <a .*?>(.*?)<\/a>
         ^
    

    在此处查看实际操作:http://regexr.com?2v60h

    【讨论】:

      【解决方案2】:

      您的正则表达式在开始标记上过于“贪婪”。这样的事情应该会更好:

      <a\s?[^>]*>([^<]*)</a>
      

      它与锚点相匹配,带有一个可选的空格,后跟除标签的关闭 > 之外的任何内容,所以当它碰到 > 时它肯定会停止。同样的技巧也适用于锚的内容,寻找除了结束锚标记的

      【讨论】:

      • 谢谢!我是一个完全的正则表达式菜鸟,这有效,但选择了整个元素而不是内容,或者像上面一样多维中的元素和内容 - 有什么想法吗?但是感谢正确的轨道:)
      【解决方案3】:

      你不应该使用正则表达式来解析 HTML...你会发现很多例子在这里解释了原因。

      也许像 PHP Simple DOM Parser 这样的东西会为你解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        相关资源
        最近更新 更多