用preg_replace替换php中的注释
我需要用php中的preg_replace()替换所有块注释。 例如:用preg_replace替换php中的注释,php,regex,Php,Regex,我需要用php中的preg_replace()替换所有块注释。 例如: /**asdfasdf fasdfasdf*/ echo "hello World\n"; 为此: echo "hello World\n"; 我在这个网站上尝试了一些解决方案,但没有人适合我。 我的代码: 例如,我的输出与输入相同。试试这个 $file = preg_replace('/^\s*?\/\*.*?\*\//m', '', $file); 使用: 输出: echo "hello World\n"; 以
/**asdfasdf
fasdfasdf*/
echo "hello World\n";
为此:
echo "hello World\n";
我在这个网站上尝试了一些解决方案,但没有人适合我。
我的代码:
例如,我的输出与输入相同。试试这个
$file = preg_replace('/^\s*?\/\*.*?\*\//m', '', $file);
使用:
输出:
echo "hello World\n";
以下是所有PHP令牌的列表:
解析PHP代码的最佳方法是使用标记器 然而,用正则表达式来实现它并不困难。只能跳过所有字符串:
$pattern = <<<'EOD'
~
(?(DEFINE)
(?<sq> ' (?>[^'\\]++|\\{2}|\\.)* ' ) # single quotes
(?<dq> " (?>[^"\\]++|\\{2}|\\.)* " ) # double quotes
(?<hd> <<< \s* (["']?)(\w+)\g{-2} \R .*? (?<=\n) \g{-1} ;? (\R|$) ) # heredoc like
(?<string> \g<sq> | \g<dq> | \g<hd>)
)
\g<string> (*SKIP)(*FAIL) | /\* .*? \*/
~xs
EOD;
$result = preg_replace($pattern, '', $data);
$pattern=我知道的可能重复,但对我来说不正确。。例如,如果我有echo“/*asdfasdf*/”它将删除它,输出将像echo“@JakubBaskiGabčo:那么请编辑您的问题并清楚地解释所有的要求。这对于preg_replace来说可能不是一个好工作-因为PHP不是一种常规语言,您将很难处理字符串中或字符串外的注释。你可以接近,但你真正想要的可能是某种PHP的标记器,它将向你发出COMMENT\u START和COMMENT\u END标记。你能用一行正则表达式转换它吗,因为我不知道怎么做?你也能修好它吗?不适用于单行注释(//…)。谢谢。@Valentitanasescu:评论不是提问的地方。此外,没有什么需要修复的,因为问题是如何删除块注释,而不是单行注释。
echo "hello World\n";
$pattern = <<<'EOD'
~
(?(DEFINE)
(?<sq> ' (?>[^'\\]++|\\{2}|\\.)* ' ) # single quotes
(?<dq> " (?>[^"\\]++|\\{2}|\\.)* " ) # double quotes
(?<hd> <<< \s* (["']?)(\w+)\g{-2} \R .*? (?<=\n) \g{-1} ;? (\R|$) ) # heredoc like
(?<string> \g<sq> | \g<dq> | \g<hd>)
)
\g<string> (*SKIP)(*FAIL) | /\* .*? \*/
~xs
EOD;
$result = preg_replace($pattern, '', $data);