【问题标题】:php - Extracting from between two strings using regexphp - 使用正则表达式从两个字符串之间提取
【发布时间】:2011-01-20 21:57:13
【问题描述】:

假设我们有一个字符串:<img src="/a.jpg"> - 如何提取/a.jpg

那个肯定是错的:#<img src="(.*)[^"]">#

【问题讨论】:

标签: php regex


【解决方案1】:

这应该可以工作

/<img\s+src="(.*?)"/

【讨论】:

    【解决方案2】:

    这行得通(尝试在这里测试http://www.spaweditor.com/scripts/regex/index.php

    /".*[^"]/

    【讨论】:

      【解决方案3】:

      /&lt;img src="([^"]*)"&gt;/ 有效。

      【讨论】:

        【解决方案4】:

        也许你认为 ^" 的方向是正确的:

        <img +src="([^"]+)">
        

        【讨论】:

          【解决方案5】:
          #<img src="(.*)[^"]">#   // original
          

          这几乎是在正确的轨道上。然而,它结合了两种不同的方法。

          (.*) 太贪心了。您需要添加? 以使其提前停止。 (.*?) 否则它会占用引号。

          那时[^"] 是多余的。但是,您可以将其用作非特定 .* 的替代品。只需将其嵌入大括号中即可。它具有永远不会意外匹配封闭引号的优点。你可以做同样的事情来代替空格,让整个正则表达式更有弹性,并省略结束 &gt; 所以当存在额外属性时它也可以工作:

          #<img[^>]+src="([^"]*)"#
          

          这是可以使用正则表达式的少数情况之一。如果你想匹配更复杂的 HTML,那么更喜欢proper parser(phpQuery 或 QueryPath 大大简化了它。)

          【讨论】:

            【解决方案6】:

            只有当 src 是 img 标签将具有的 only 属性并且它始终是第一个时,其他答案才有效。

            if (preg_match('/<img\s+(?:\w+="[^"]+"\s*)*?src="([^"]+)/', $input, $matches))
              $src = $matches[1];
            

            【讨论】:

              猜你喜欢
              • 2017-04-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-30
              • 1970-01-01
              • 1970-01-01
              • 2014-06-12
              • 2018-11-22
              相关资源
              最近更新 更多