我想匹配图片代码的src和title属性:
图案:
<img [^>]*src=["|\']([^"|\']+["|\'])|title=["|\']([^"|\']+)
目标:
<img src="http://someurl.jpg" class="quiz_caption" title="Caption goes here!">
这种模式给了我一个不需要的匹配,title =“content”,以及我实际想要的匹配,即'title'之后的引号之间的值,即'content'。
所以,我的比赛是:
<img src="http://someurl.jpg
http://someurl.jpg
title="Caption goes here!"
Caption goes here!
有没有办法避免这些比赛中的第三场比赛?我在PHP 5.2.x中使用PCRE
答案 0 :(得分:3)
除非您知道自己正在处理HTML的一个子集,否则无法使用正则表达式解析HTML。你的正则表达式,即使是正确的,也会失败,例如如果任何属性具有>
字符。
使用DOM扩展名:
<?php
$target = <<<EOD
<img src="http://someurl.jpg" class="quiz_caption" title="Caption goes here!">
EOD;
$d = new DOMDocument();
$d->loadHTML($target);
$img = $d->getElementsByTagName("img");
echo $img->item(0)->getAttribute("src") . "\n";
echo $img->item(0)->getAttribute("title") . "\n";
答案 1 :(得分:1)
如果您确切知道自己在寻找什么,可以试试这个:
src="(.+?)"|title="(.+?)"
我还建议你在http://gskinner.com/RegExr/进行一些游戏,这是一个flash的在线注册表...它可以帮助你提高你的知识,并且它有许多由社区预先构建的表达。