查找所有<;预处理>;PHP中的标记(带属性)
我一直在关注如何在PHP中检索所有标记 具体来说(在wordpress下),我想找到所有查找所有<;预处理>;PHP中的标记(带属性),php,regex,wordpress,tags,Php,Regex,Wordpress,Tags,我一直在关注如何在PHP中检索所有标记 具体来说(在wordpress下),我想找到所有 有什么提示吗 干杯 您最好使用DOM解析器来解析HTML。考虑这个代码: <?php $xmldoc = new DOMDocument(); $xmldoc->load('test.xml'); $xpathvar = new Domxpath($xmldoc); echo $xpathvar->evaluate('count(*//
有什么提示吗
干杯 您最好使用DOM解析器来解析HTML。考虑这个代码:
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('test.xml');
$xpathvar = new Domxpath($xmldoc);
echo $xpathvar->evaluate('count(*//pre)');
?>
您最好使用DOM解析器来解析HTML。考虑这个代码:
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('test.xml');
$xpathvar = new Domxpath($xmldoc);
echo $xpathvar->evaluate('count(*//pre)');
?>
如果数据符合XML,则可以使用XPATH表达式 只是一个很快的例子:
测验
1.
2.
3.
然后是这样一个PHP:
load('test.xml');
$xpathvar=newdomxpath($xmldoc);
echo$xpathvar->evaluate('count(*//pre');
?>
这也适用于html/xml片段。如果数据符合xml,则可以使用XPATH表达式 只是一个很快的例子:
测验
1.
2.
3.
然后是这样一个PHP:
load('test.xml');
$xpathvar=newdomxpath($xmldoc);
echo$xpathvar->evaluate('count(*//pre');
?>
这也适用于html/xml片段。一如既往,用正则表达式解析html永远不会解决这个问题。要考虑的事情太多了(标记、间距:
您可以在以下页面轻松找到可用的方法和属性:
- 属性:
- 节点:
- 文件:
与以往一样,用正则表达式解析HTML永远无法解决问题。需要考虑的事情太多了(标记、间距:
您可以在以下页面轻松找到可用的方法和属性:
- 属性:
- 节点:
- 文件:
使用非贪婪匹配器*?
获取所有
,因此您最终得到的是/(.*)/
我不明白。我尝试过“/(.*)/”
但它仍然给我计数(匹配[0])=0
。完全使用上面的模式。好的,但我仍然通过回声计数(getPreTags($obj))获得计数0;
,其中函数是我的函数,模式为/(.*)/
…我通过count()获得1
)
您的函数返回的值与您在上面发布的HTML字符串完全相同。在发布之前,您是否从原始HTML字符串中清除了任何换行符?使用none贪婪匹配器*?
获取所有
,因此您最终得到的结果是/(.*)/
我不明白。我尝试过“/(.*)/”
但它仍然给我计数(匹配[0])=0
。完全使用上面的模式。好的,但我仍然通过回声计数(getPreTags($obj));
得到计数0,其中函数是我的模式为/(.*)/
…我通过计数()得到1
)
您的函数返回的值与您在上面发布的HTML字符串完全相同。在发布之前,您是否从原始HTML字符串中清除了任何换行符?虽然这是一个非常好的解决方案,但我没有完整的DOM,只有wordpress项的内容:(@senseiwa:如上面的示例所示,您不需要使用完整页面(DOM)来使其工作。嗯,那么我的代码中有一些问题:它停止计算。在这里()您可以找到我的代码:$obj
包含wordpress项。该函数将只打印“开始”,然后它停止。你能在这个函数的开头调用var_dump($obj);
来显示$obj
的内容吗?@senseiwa:我看不到你的HTML内容。你能通过编辑你的问题将它粘贴到这里或粘贴到粘贴箱上吗?虽然这是一个很好的解决方案,但我没有整个DOM,只有wordpress项的内容:(@senseiwa:如上面的示例所示,您不需要使用完整页面(DOM)来使其工作。嗯,那么我的代码中有一些问题:它停止计算。在这里()您可以找到我的代码:$obj
包含wordpress项。该函数将只打印“开始”,然后它就停止了。你能在这个函数的开头调用var_dump($obj);
来显示$obj
的内容吗。@senseiwa:我看不到你的HTML内容。你能通过编辑你的问题将它粘贴到这里吗?不幸的是,wordpress不允许我连接到每个方面(我不是那么熟练),但我可以检索项的字符串,它不是真正的DOM…不幸的是,wordpress不允许我连接到每个方面(我不是那么熟练),但我可以检索项的字符串,它不是真正的DOM…
$html = <<< EOF
<a href="http://example.com/foo.htm" class="curPage">Click link1</a> morestuff
<pre>A B C</pre>
<a href="http://notexample.com/foo/bar">notexample.com</a> morestuff
<pre id="pre1">X Y Z</pre>
<a href="http://example.com/foo.htm">Click link1</a>
<pre id="pre2">1 2 3</pre>
EOF;
// create a new DOM object
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
// select all pre tags with attributes
$nodelist = $xpath->query("//pre[@*]");
// iterate through selected nodes and print them
for($i=0; $i < $nodelist->length; $i++) {
$node = $nodelist->item($i);
var_dump($node->nodeValue);
}
string(11) "X Y Z"
string(11) "1 2 3"
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head>
<title>Test</title>
</head>
<body>
<pre>1</pre>
<pre>2</pre>
<pre>3</pre>
</body>
</html>
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('test.xml');
$xpathvar = new Domxpath($xmldoc);
echo $xpathvar->evaluate('count(*//pre)');
?>
$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$preTags = $dom->getElementsByTagName('pre');
foreach($preTags as $pre)
{
echo $pre->nodeValue, PHP_EOL;
if ($pre->hasAttributes())
{//if there are attributes
foreach($pre->attributes as $attribute)
{
//do something with attribute
echo 'Attribute: ', $attribute->name, ' = ', $attribute->value, PHP_EOL;
}
}
}