Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用preg_replace替换php中的注释_Php_Regex - Fatal编程技术网

用preg_replace替换php中的注释

用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"; 以

我需要用php中的preg_replace()替换所有块注释。 例如:

/**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);