我试图使用以下正则表达式从html源代码获取图像网址,但是当图片网址中包含空格时,它会失败。例如,这个网址:
<img src="http://a57.foxnews.com/global.fncstatic.com/static/managed/img/Entertainment/876/493/kazantsev pink bikini reuters.jpg?ve=1&tl=1" alt="kazantsev pink bikini reuters.jpg" itemprop="image">
$image_regex_src_url = '/<img[^>]*'.'src=[\"|\'](.*)[\"|\']/Ui';
preg_match_all($image_regex_src_url, $string, $out, PREG_PATTERN_ORDER);
这让我回过头来看 http://a57.foxnews.com/global.fncstatic.com/static/managed/img/Entertainment/876/493/kazantsev
有没有办法匹配任何字符,包括空格?或者是我必须在php配置中设置的东西?
答案 0 :(得分:1)
您的正则表达式有几个问题。
首先,您尝试使用连接运算符('.'
)将表达式的两个部分连接在一起(这不是必需的)。其次,您不需要在角色类中使用交替运算符|
。
点.
将匹配除换行序列之外的任何字符。这些标记可能包含换行符,因为它们位于HTML源代码中。您可以使用s
(dotall)修饰符强制点匹配任何字符(包括换行符)或使用否定字符类意味着匹配任何字符除。
使用s
( dotall )修饰符:
$image_regex_src_url = '/<img[^>]*src=(["\'])(.*?)\1/si';
使用否定字符类[^ ]
$image_regex_src_url = '/<img[^>]*src=(["\'])([^"\']*)\1/i';
虽然使用DOM之类的解析器来获取结果要容易得多。
$doc = new DOMDocument;
@$doc->loadHTML($html); // load the HTML
foreach($doc->getElementsByTagName('img') as $node) {
$urls[] = $node->getAttribute('src');
}
print_r($urls);