PHP/HTML 注释标签
Posted
技术标签:
【中文标题】PHP/HTML 注释标签【英文标题】:PHP / HTML comments tags 【发布时间】:2015-12-19 23:49:26 【问题描述】:我有几个 html 页面的代码如下所示:
<!-- ID: 123456 -->
我需要的是一个可以提取该 ID 号的 php 脚本。我尝试了以下方法:
if (preg_match('#^<!--(.*?)-->#i', $output))
echo "A match was found.";
else
echo array_flip(get_defined_constants(true)['pcre'])[preg_last_error()];
echo "No match found.";
`
这总是给出“未找到匹配项”,没有报告错误。我也尝试过 preg_match_all 和相同的结果。我发现唯一可行的方法是创建基于空间的数组,但这非常耗时且浪费处理器能力。
作为参考,我已经查看并尝试了这些页面上的几乎所有建议:
Explode string by one or more spaces or tabs
http://php.net/manual/en/function.preg-split.php
How to extract html comments and all html contained by node?
【问题讨论】:
也许这是因为-
是一个特殊符号,应该转义?
ID是如何产生的?为什么不能拦截呢?
从模式中删除^
。否则,它将仅在字符串的开头匹配。
$output
是带有<!-- ID: 123456 -->
的字符串还是您要捕获的ID?在这里工作,eval.in/437735。如果您希望 <!
仅位于每行的开头,则可能需要 m
修饰符。
@u_mulder -
不是特殊符号,方括号内除外。
【参考方案1】:
要从结构化数据(如 HTML、XML、Json...)中提取信息,请使用正确的解析器(DOMDocument 和 DOMXPath 来查询 DOM 树):
$html = <<<'EOD'
<script>var a='<!-- ID: avoid_this --> and that <!-- ID: 666 -->';</script>
blahblah<!-- ID: 123456 -->blahblah
EOD;
$query = '//comment()[starts-with(., " ID: ")]';
$dom = new DOMDocument;
$dom->loadHTML($html);
$xp = new DOMXPath($dom);
$nodeList = $xp->query($query);
foreach ($nodeList as $node)
echo substr($node->textContent, 5, -1);
使用is_numeric
或正则表达式后,请随意检查结果。您也可以注册自己的 php 函数并将其包含在 xpath 查询中:http://php.net/manual/en/domxpath.registerphpfunctions.php
【讨论】:
【参考方案2】:首先将 HTML 文件视为文本文件,因为您只想从 .html 文件中读取一些文本。
test.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<p>This is a test HTML page<p>
<!-- ID: 123456 -->
</body>
</html>
从 HTML 文件中获取 ID 的 PHP 脚本
<?php
$fileName = 'test.html';
$content = file_get_contents($fileName);
$start = '<!-- ID:';
$end = '-->';
function getBetween($content,$start,$end)
$r = explode($start, $content);
if (isset($r[1]))
$r = explode($end, $r[1]);
return $r[0];
return '';
echo str_replace(' ', '', getBetween($content,$start,$end));
?>
【讨论】:
【参考方案3】:试试这个怎么样:
<!-- ID: ([\w ]+) -->
这将搜索您的示例中提到的所有文字,并且 提取数字ID。您可以在编号的帮助下获取它 组。
PS:使用转义。
【讨论】:
这里,只有\w
必须转义。
谢谢我已经更新了,我在java环境中尝试了正则表达式,忘记删除转义字符了。以上是关于PHP/HTML 注释标签的主要内容,如果未能解决你的问题,请参考以下文章