php preg_match_all反斜杠问题

问题描述

| 我的文字中有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
)