preg_replace()所有出现

时间:2013-11-30 06:05:45

标签: php regex preg-replace

我想创建一个脚本,删除文件中的所有注释。我现在的正则表达是:

$new = preg_replace_all("/(\/\*.*\*\/)/s", "", $contents);

哪个匹配(并删除)/**/

之间的任何内容

当文件的内容如下所示时,问题就变得很明显了:

/* First comment */ 
first_function();

/* Second comment */ 
second_function();

我的正则表达式不是删除第一个和第二个注释,而是保留两个函数调用,而是匹配从第一个/*到最后一个*/的所有内容,从而完全删除first_function()调用。

我想一个解决方案是将我的.*(与任何内容匹配)替换为匹配任何的内容,直到您到达*/ 。但我不知道怎么写。我预计它会像[^\*\/]那样但它没有按预期工作。

正确的正则表达式是什么?

1 个答案:

答案 0 :(得分:3)

你非常亲密。您只需在?之后使用非贪婪匹配字符.*,如下所示:

$new = preg_replace_all("/(\/\*.*?\*\/)/s", "", $contents);
                                 ^
                                 ^
                                 ^
                                 ^

只需要一个问号...

在工作here

中查看此内容