我想在这个字符串上找到并做一些操作:
<img src="images/video.png" border="0" alt="60" />
我一直在玩正则表达式,但它显然还不起作用:
if (preg_match_all('<img src="images/video.png" border="0" alt="[^"]*">', $content, $regs)) {
for($i=0;$i<count($regs[0]);$i++){
echo $regs[0][$i] . "<br>";
$id = preg_replace('alt="[^"]*"', "$1", $regs[0][$i]);
echo "The id: " . $id . "<br>";
}
}
答案 0 :(得分:2)
如何使用PHP Simple HTML DOM Parser
解析DOM您可以从此处下载脚本:http://sourceforge.net/projects/simplehtmldom/files/
如果您将该脚本加载到当前脚本中,请执行以下操作:
include_once("simple_html_dom.php");
然后,您可以循环浏览HTML中的所有图像,并使用它们执行所需的操作:
$html = "Your HTML code";
foreach($html->find('img') as $element) {
// Do something with the alt text
$alt_text = $element->alt;
// Replace the image
$element->src = 'new_src';
$element->alt = 'new_alt';
}
不使用库:
// Load the HTML
$html = "Your HTML code";
$dom = new DOMDocument();
$dom->loadHTML($html);
// Loop through all images
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
// Do something with the alt
$alt = $image->getAttribute('alt');
// Replace the image
$image->setAttribute("src", "new_src");
$image->setAttribute("alt", "new_alt");
}
// Get the new HTML string
$html = $dom->saveHTML();
答案 1 :(得分:1)
您应该使用DOM来解析XML / HTML ...
答案 2 :(得分:1)
正则表达式不是推荐的方法,因为格式错误的html很难准确地使用正则表达式。您想要查看DOMDocument:http://php.net/manual/en/class.domdocument.php
此处讨论了其他替代方案:
答案 3 :(得分:0)
php > $xml = new SimpleXmlElement('<img src="images/video.png" border="0" alt="60" />');
php > foreach($xml->xpath('//@alt') as $alt) echo "Id is: ",(string)$alt,"\n";
Id is: 60
答案 4 :(得分:0)
[将我的评论扩展为答案]
这里有一些示例代码可以帮助您开始使用PHP的DOM库:
$html = '...';
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
// Build the XPath query (you can specify very complex criteria here)
$images = $xpath->query('//img[@src="images/video.png" and @border="0"]');
foreach($images as $image) {
echo 'This image has alt = '.
$image->attributes->getNamedItem('alt')->nodeValue.
'<br />';
}
如果您想使用更高级的逻辑自定义查询,可以查看XPath tutorial。
答案 5 :(得分:0)
你应该使用这个正则表达式
<img src="images/video.png" border="0" alt="([^"]*)" />
但是如果你也想承认这个输入
<img alt="60" src="images/video.png" border="0" />
以及任何其他可能的排列,那么最好自己匹配图像标记,然后匹配其内容的alt属性。