Php 从HTML文本中提取特定文本
我对正则表达式不太熟悉。我正试图获得底部描述的结果。以下是我迄今为止所做的工作(请注意,Php 从HTML文本中提取特定文本,php,regex,string,preg-match-all,Php,Regex,String,Preg Match All,我对正则表达式不太熟悉。我正试图获得底部描述的结果。以下是我迄今为止所做的工作(请注意,$page包含制表器): 试试这个 <h1>(.*?)<span> /(.*?)/</span> (.*)/(.*)/ $1和$2是您预期的结果。我建议将DOM与trim一起使用,不需要正则表达式,下面是一个适用于您的具体案例的工作代码: $page = "<div class=\"title-container\">\n
$page
包含制表器):
试试这个
<h1>(.*?)<span> /(.*?)/</span>
(.*)/(.*)/
$1和$2是您预期的结果。我建议将DOM与
trim
一起使用,不需要正则表达式,下面是一个适用于您的具体案例的工作代码:
$page = "<div class=\"title-container\">\n <h1>Text here<span> /Sub-text/</span> </h1>\n </div>";
$dom = new DOMDocument;
$dom->loadHTML($page);
$hs = $dom->getElementsByTagName('h1');
foreach ($hs as $h) {
$enttitlenodes = $h->getElementsByTagName('span');
if ($enttitlenodes->length > 0 && $enttitlenodes->item(0)->tagName == 'span')
{
$entitle = trim($enttitlenodes->item(0)->nodeValue, " /");
echo $entitle . "\n";
$h->removeChild($enttitlenodes->item(0));
}
$hutitle = $h->nodeValue;
echo $hutitle;
}
$page=“\n此处文本/子文本/\n”;
$dom=新的DOMDocument;
$dom->loadHTML($page);
$hs=$dom->getElementsByTagName('h1');
foreach($hs作为$h){
$enttitlenodes=$h->getElementsByTagName('span');
如果($enttitlenodes->length>0&&$enttitlenodes->item(0)->标记名=='span')
{
$authentice=trim($enttitlenodes->item(0)->nodeValue,“/”;
echo$授权。“\n”;
$h->removeChild($enttitlenodes->item(0));
}
$hutitle=$h->nodeValue;
echo$hutitle;
}
请参见
DOMDocument::getElementsByTagName
返回的是DOMNodeList
而不是数组,因此您不能在PHP5.6.3之前写入$h->getElementsByTagName('span')[0]
,但$h->getElementsByTagName('span')->项(0)
。这并不意味着它返回一个自php 5.6.3以来的数组,但只意味着您可以通过数组表示法访问项。@CasimiritHippolyte:我知道,我更新了代码,它现在甚至检查是否存在
标记。在这种情况下,它不使用count(设计用于计数数组项),使用属性DOMNodeList::length
您能用非面向对象的方法编写这个吗?什么是min php版本5?@Gable:你的意思是你仍然坚持使用正则表达式解决方案吗?/(.*)(.*)(.*)(.*)/
这两个版本都是相同的。安全的方式那样使用它很高兴帮助你。:)在你的记事本上试试这个+++(.*?/(.*?)/我想没有必要\/
<h1>(.*?)<span> /(.*?)/</span>
$page = "<div class=\"title-container\">\n <h1>Text here<span> /Sub-text/</span> </h1>\n </div>";
$dom = new DOMDocument;
$dom->loadHTML($page);
$hs = $dom->getElementsByTagName('h1');
foreach ($hs as $h) {
$enttitlenodes = $h->getElementsByTagName('span');
if ($enttitlenodes->length > 0 && $enttitlenodes->item(0)->tagName == 'span')
{
$entitle = trim($enttitlenodes->item(0)->nodeValue, " /");
echo $entitle . "\n";
$h->removeChild($enttitlenodes->item(0));
}
$hutitle = $h->nodeValue;
echo $hutitle;
}