我有简单的代码看起来像这样
function session(){
return 1; // this default value for session
}
我需要使用正则表达式或代码来删除评论// this is default value for session
,并且只删除此类评论,该评论以一两个或更多的空格开头,然后是//
,然后是新行。< / p>
忽略所有其他类型的评论和案例。
答案 0 :(得分:1)
更新 (1)
只删除这种类型的注释,它以一个或两个或更多的空格开头,然后是//,然后是一个新行
试试这个:
PHP Fiddle 1 - 点击&#34;运行&#34;或F9查看结果
/\s+\/\/[^\n]+/m
\s+
以空格或两个或更多 \/\/
转发的//
[^\n]+
除新行外的所有内容 更新以确保 - 有点 - 这只适用于代码行,我们可以使用lookbehind (2)< / sup> regex检查空格[s]之前是否有分号;
,注释斜杠//
,所以正则表达式是这样的:
/(?<=;)\s+\/\/[^\n]+/m
其中(?<=;)
是lookbehind,它基本上告诉引擎向后看并检查它是否在;
之前匹配。
(1) preg_replace
全局工作,无需 g
标志< / em>的
(2) javascript中不支持lookbehind
答案 1 :(得分:0)
纯粹的正则表达式解决方案看起来像这样:
$result = preg_replace('#^(.*?)\s+//.*$#m', '\1', $source);
但这仍然是错误的,因为你可能被这样的东西困住:
$str = "This is a string // that has a comment inside";
更强大的解决方案是使用token_get_all()完全重写php代码,以实际将PHP代码解析为令牌,然后在重新发出代码时可以选择性地删除它们:
foreach(token_get_all($source) as $token)
{
if(is_array($token))
{
if($token[0] != T_COMMENT || substr($token[1] != '//', 0, 3))
echo $token[1];
}
else
echo $token;
}