php preg_match_all反斜杠问题

时间:2011-06-11 15:01:08

标签: php

我的文字中有img标签,我想从src获取文件的名称

所以我使用这段代码

preg_match_all("|\/img\/(.*)\/>|U", $article_header, $matches, PREG_PATTERN_ORDER);
echo "match=".$matches[1][0]."<br/>";

这样做我得到了这个结果

匹配= 500.JPG \“alt = \”\“width = \”500 \“height = \”360 \“

所以在这种情况下我使用“\ /&gt;”这意味着标签的结束。

但我只想要文件名“500.JPG”所以我必须使用“\”但是当我这样做时

    preg_match_all("|\/img\/(.*)\\|U", $article_header, $matches, PREG_PATTERN_ORDER);

我没有匹配:( 请帮忙

在yes123的帮助下,我做了这个

$doc = new DOMDocument();
$doc->loadHTML($article_header);

$imgs = $doc->getElementsByTagName('img');
$img_src = array();
foreach ($imgs as $img) {
// Store the img src
$img_src[] = $img->getAttribute('src');
echo $img_src[0];
}

给了我这个

\ “源/公共/用户/ qqqqqq /物品/ 2011-06-11 / 7 / IMG / 500.JPG \”

但是现在无论如何我只想要500.JPG来自

那么正确的正则表达式是什么?

5 个答案:

答案 0 :(得分:4)

要在正则表达式中匹配真正的反斜杠字符,您必须“双重转义”它,这意味着4个反斜杠匹配单个反斜杠:\\\\

preg_match_all("|/img/(.*)\\\\|U", ...);

答案 1 :(得分:0)

您无法使用正则表达式解析HTML。

使用DOMDocument

// HTML already parsed into $dom
$imgs = $dom->getElementsByTagName('img');
$img_src = array();
foreach ($imgs as $img) {
  // Store the img src
  $img_src[] = $img->getAttribute('src');

}

不要忘记,在打开问题之前,您始终可以搜索google或stackoverflow

答案 2 :(得分:0)

preg_match_all('/<img[^>*]src="([^"]+)".*>/Uis', $article_header, $matches)

答案 3 :(得分:0)

尝试类似的东西,我现在测试了它:

$article_header = 'foo <img src=\\"sources/public/users/qqqqqq/articles/2011-06-11/7/img/500.JPG\\" /> foo';
preg_match_all('|<img[^>]+?src="[^"]*?([^/"]+?)"|', stripslashes($article_header), $matches, PREG_PATTERN_ORDER);
echo "match=".$matches[1][0]."<br/>";

好像你有$article_header斜杠(有点刺激),所以我添加了stripslashes()

答案 4 :(得分:0)

使用php函数pathinfo

http://php.net/manual/en/function.pathinfo.php

pathinfo($img_src[0]);

结果

Array
(
    [dirname] => sources/public/users/qqqqqq/articles/2011-06-11/7/img/
    [basename] => 500.JPG
    [extension] => JPG
    [filename] => 500
)