如何从给定的HTML标记中提取特定的子字符串,而不知道它的长度?

时间:2012-08-09 18:05:05

标签: php html

我想做类似的事情:

<?php
$text = "<font style='color: #fff'>";
$replaceandshow = str_replace("<font style=\"?\">", "the font style is ?", $text);
echo $replaceandshow;
?>

例如?是颜色:#fff,但我希望PHP会自己跟踪它,是否可能+如果可能,我该怎么做?

P.S:有人给了我一个代码,但它现在正在运行,它为我显示一个白页。

<?php
$colorstring = "<font style='#fff'>";
$searchcolor = preg_replace('[a-fA-F0-9]{3,6}','[font style=$1]Test[/font]',$colorstring);
echo $searchcolor;

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

由于您需要从任何HTML中提取任何属性,因此您可以使用php XML解析来执行此操作。

<?php
$doc=new DOMDocument();
$doc->loadHTML("<html><body>Test<br><font style='color: #fff;'>hellow</font><a href='www.somesite.com' title='some title'>some site</a></body></html>");
$xml=simplexml_import_dom($doc); // just to make xpath more simple
$fonts=$xml->xpath('//font');
foreach ($fonts as $font) {
    echo 'font style = '.$font['style']."<br />";
}

$as=$xml->xpath('//a');
foreach ($as as $a) {
    echo 'href = '.$a['href'] . ' title = ' . $a['title']."<br />";
}
?>

那将返回:

font style = color: #fff;
href = www.somesite.com title = some title

您可以为需要提取的每个HTML标记使用不同的foreach循环,然后输出您想要的任何属性。

根据How to extract img src, title and alt from html using php?

回答

答案 1 :(得分:1)

您正在获取白页,因为错误报告已关闭。您的代码中的错误在preg_replace中缺少分隔符。此外,要使用反向引用,您应该在括号中包含匹配所需的表达式。

preg_replace('/([a-fA-F0-9]{3,6})/','the font style is $1',$colorstring);

应给出正确的输出。

您可能会考虑使用更加紧缩的表达式,因为当前表达式非常适合匹配其他字符串,如“FFFont”。另一件需要注意的是,表达式可能会产生类似的输出。

<font style='color: the color is #fff'>

尝试:

/<font style='color: #([a-fA-F0-9]{3,6})'>/

答案 2 :(得分:0)

这适用于简单的style属性:

$text = "<font style='color: #fff'>";
preg_match("/<font style=['\"]([^'\"]+)['\"]>/", $text, $matches);
echo "The font style is ".$matches[1];

对于更复杂的事情(例如:如果它包含引号),您需要使用HTML解析器,例如http://www.php.net/manual/en/class.domdocument.php