我的文字中有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来自
那么正确的正则表达式是什么?
答案 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
)