问题描述
|
我的文字中有img标签,我想从src中获取文件名
所以我用这段代码
preg_match_all(\"|\\/img\\/(.*)\\/>|U\",$article_header,$matches,PREG_PATTERN_ORDER);
echo \"match=\".$matches[1][0].\"<br/>\";
这样做我得到这个结果
match = 500.JPG \\\“” alt = \\\“ \\\” width = \\\“ 500 \\\” height = \\\“ 360 \\\”
因此,在这种情况下,我使用\“ \\ /> \”表示标记的结尾。
但是我只想要文件“ 500.JPG”的名称,所以我必须使用“”。
preg_match_all(\"|\\/img\\/(.*)\\\\|U\",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];
}
这给我这个
\\\“来源/public/users/qqqqqq/articles/2011-06-11/7/img/500.JPG \\\”
但是现在无论如何我只想要500.JPG
那么正确的正则表达式是什么?
解决方法
要匹配正则表达式中的真实反斜杠字符,您必须对其进行“双转义”,即4个反斜杠以匹配单个反斜杠:
\\\\\\\\
preg_match_all(\"|/img/(.*)\\\\\\\\|U\",...);
, preg_match_all(\'/<img[^>*]src=\"([^\"]+)\".*>/Uis\',$article_header,$matches)
, 您无法使用正则表达式解析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
, 尝试类似的方法,我现在对其进行了测试:
$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/>\";
看来您有9英镑的斜线(这有点令人讨厌),所以我加了10英镑。
, 使用php函数pathinfo
http://php.net/manual/zh/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
)