使用正则表达式删除 /** */ 和 // ** **// PHP 注释

4

这里是ReGex新手。

我需要使用RegEx从PHP文件中删除两种不同类型的注释。

我在BBEdit文本编辑器中找到了以下表达式:

\/\*[\s\S]*?\*\/

它可以删除第一种样式的注释,如下所示:

/** This comment gets removed with my regex */

但是它无法删除这些样式的注释:

// ** This comment has the double leading-trailing slashes ** //

我不知道为什么有两种不同类型的注释混合在一起,而且只有少量//注释,但我需要将它们全部删除。

在搜索中添加另一个斜杠,即:

\/\\*[\s\S]*?\*\/

会使表达式变得贪婪,并删除非注释代码中的单个斜杠。一个有效的表达式显然需要更复杂的内容 :)


我认为第二个不是两种类型的混合,而只是使用“//”进行单行注释的风格。 - King King
3个回答

5

PHP有一个内置的函数可以实现这个功能:

php_strip_whitespace($filename);

2
这很棒,我基于正则表达式提供了一个答案,但是+1是因为你使用了内置函数。 - Federico Piazza
一个 PHP 函数的解决方案很好,我将来可能会用到它;但是我需要在 BBedit 中运行正则表达式来清理正在打开和编辑的文件。而且,strip_whitespace 会删除所有空格并使代码过于紧凑,不利于进行清洁的编辑。 - markratledge
@FedericoPiazza,既然您喜欢这个答案,为什么不编写一个PHP脚本:<?php $file = $_GET["file_name"]; $new_content = php_strip_whitespace(file_get_contents($file)); file_put_contents($file, $new_content); ?> 并像这样调用它:http://localhost/stripwhite.php?file=myfile.php - Popsyjunior

2
您可以使用这个正则表达式:
\/\*.*?\*\/|\/\/.*?\n

演示链接

图片描述

正如Hwnd在这个答案中指出的那样,如果您将分隔符更改为~,则可以使用清理后的正则表达式:

/\*.*?\*/|//.*?\n

谢谢,这些可行,但是@vks已经提供了一个可行的答案,因为你的第一版删除了所有的注释和代码。 - markratledge
@songdogtech 感谢您的评论。顺便说一下,您可以自由选择最适合您的答案。感谢您的点赞。 - Federico Piazza

1
~//?\s*\*[\s\S]*?\*\s*//?~

这个有效。只需按照您的答案添加另一个\和空格消耗者。

查看演示。

http://regex101.com/r/lK9zP6/6


这很棒。而且regex101是一个很好的网站,可以玩转正则表达式;我之前不知道它的存在。谢谢。 - markratledge
@songdogtech 是的,没错。不用谢。还有一个 https://www.debuggex.com/ 。可以用来可视化。 - vks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接