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 是带有&lt;!-- ID: 123456 --&gt; 的字符串还是您要捕获的ID?在这里工作,eval.in/437735。如果您希望 &lt;! 仅位于每行的开头,则可能需要 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 注释标签的主要内容,如果未能解决你的问题,请参考以下文章

编程基础 - 注释标签说明

在BAT文件里用啥符号来注释?

我的PDF导出注释到Word时候提示PDF 未加标签,怎么解决啊??

HTML常用标签之注释标签

HTMLHTML 标签 ③ ( 链接标签 | 注释标签 )

列出所有带有注释的 git 标签? [复制]