preg_match PHP 评论不包括引号
preg_match PHP comments excluding if in quotes
我正在尝试编写一个正则表达式来查找和匹配 PHP 代码文件中的注释文本,到目前为止我所做的一切工作正常,但有一个例外:
我的模式:
$pattern='/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/';
它仍然匹配这样的行
$string="//this is not a comment"
$string2="/*this is not a comment */"
我知道我需要在某处添加 (?:^|[^"]+[^"]),但真的不知道如何添加,是否有可能避免介于“ ”之间的任何内容?
如您所见,使用正则表达式会很棘手。但是 PHP 内置了解析自身的函数,比如 token_get_all().
这是一个简单的测试脚本,它将读取名为 foo.php
的假设文件中的 PHP 代码并打印出所有注释,而不考虑注释字符 (//
, #
, 或 /* */
):
<?php
$code = file_get_contents('foo.php');
$tokens = token_get_all($code);
foreach ($tokens as $token) {
if (is_array($token)) { // Sometimes the token element will be a single character, like ; . > ! etc.
if (token_name($token[0]) === 'T_COMMENT' || token_name($token[0]) === 'T_DOC_COMMENT') {
echo $token[1] . PHP_EOL;
}
}
}
我正在尝试编写一个正则表达式来查找和匹配 PHP 代码文件中的注释文本,到目前为止我所做的一切工作正常,但有一个例外:
我的模式:
$pattern='/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/';
它仍然匹配这样的行
$string="//this is not a comment"
$string2="/*this is not a comment */"
我知道我需要在某处添加 (?:^|[^"]+[^"]),但真的不知道如何添加,是否有可能避免介于“ ”之间的任何内容?
如您所见,使用正则表达式会很棘手。但是 PHP 内置了解析自身的函数,比如 token_get_all().
这是一个简单的测试脚本,它将读取名为 foo.php
的假设文件中的 PHP 代码并打印出所有注释,而不考虑注释字符 (//
, #
, 或 /* */
):
<?php
$code = file_get_contents('foo.php');
$tokens = token_get_all($code);
foreach ($tokens as $token) {
if (is_array($token)) { // Sometimes the token element will be a single character, like ; . > ! etc.
if (token_name($token[0]) === 'T_COMMENT' || token_name($token[0]) === 'T_DOC_COMMENT') {
echo $token[1] . PHP_EOL;
}
}
}