【问题标题】:PHP regex match certain chars and get end of stringPHP正则表达式匹配某些字符并获取字符串结尾
【发布时间】:2014-03-19 19:38:36
【问题描述】:

imo 标题有点不清楚,但我找不到更好的方式来表达我的担忧。 我正在尝试从 Reddit 获取一些图片。所以当我试图获取图片的网址时 我遇到了一些问题。

$url = 'http://www.reddit.com/r/pics';
$str = file_get_contents($url);

这是我目前拥有的。要获取 url 代码中 image-url 所在的特定部分,我需要找到 html 的这一部分:

`<a class="thumbnail may-blank " href="http://i.imgur.com/K4q9i5c.jpg">`

当我试图弄清楚如何获取页面上所有链接的每个 href 时,我只能考虑正则表达式。 寻找部分

<a class="thumbnail may-blank "

然后找到这个>标志我可以得到整行。我最终可以从哪里获得图片的网址。

所以我一直在尝试并试图找到一个匹配的正则表达式,但我无法让它工作。也许这里有人可以帮助我。或者有更好的解决方案。

非常感谢, 谢谢

【问题讨论】:

  • 还有更简单的选项,例如带有qp($url)-&gt;find("a.thumbnail.may-blank").attr("href"); 的QueryPath(和一个循环)。正则表达式只有在输入一致的情况下才可取和/或,前提是您精通它。
  • 感谢马里奥关于 QueryPath 的提示。我现在有点迷路了,因为我正试图在我的 Windows 电脑上安装这个东西。如果我是对的,安装程序似乎适用于 Linux。

标签: php regex file-get-contents


【解决方案1】:

不应该使用正则表达式来解析 html,它真的是一个糟糕的选择。
但如果你真的必须这样做,这样的事情可能会奏效。
(未经测试)

 #  '/(?s)<a\s+class\s*=\s*(["\'])(?:(?!\1|[<>]).)*\1\s+href\s*=\s*(["\'])((?:(?!\2|[<>]).)*)\2/'

 (?s)                               # Dot-All
 <a \s+ class \s* = \s*             # class
 ( ["'] )                           # (1), delimiter
 (?:
      (?! \1 | [<>] )
      . 
 )*
 \1                                 # delimiter 
 \s+ 
                                    # [^<>]* ( add if necessary )
 href \s* = \s*                     # href
 ( ["'] )                           # (2), delimiter
 (                                  # (3 start), Url
      (?:
           (?! \2 | [<>] )
           . 
      )*
 )                                  # (3 end)
 \2                                 # delimiter

【讨论】:

    【解决方案2】:

    如果您只想要 a 标签中的 href,请尝试:

    '<a.*href=\"(.*)\".*$'
    

    【讨论】:

      猜你喜欢
      • 2013-09-06
      • 2021-01-17
      • 2015-09-28
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      相关资源
      最近更新 更多