在PHP中替换//注释行

时间:2018-09-19 09:17:40

标签: php regex preg-replace

我正在尝试使用preg_replace删除字符串中以//开头的任何行。

到目前为止,我的代码:

$str = preg_replace('#^//(.*)?$#', '', $str);

它没有删除任何内容。

2 个答案:

答案 0 :(得分:0)

您将要添加m修饰符。没有它,^$表示字符串的开始和结束对于m,它们指的是行的开始和结束 < / em>。

$str = preg_replace('#^//(.*)?$#m', '', $str);

答案 1 :(得分:0)

您已将表达式锚定到行的开头和结尾。不确定这是否是故意的,因为那只会覆盖整行注释。

此外,如@ daniel-williams所述,默认情况下,^$匹配字符串的开头和结尾,而不是行的开头和结尾。

以下内容适用于任何地方的任何//注释(并且默认情况下,由于.与换行符不匹配,因此仅在当前行中显示):

$result = preg_replace('%//(.*)%', '', $subject);

或者,如果您还想在评论前面加上任何空格,则此:

$result = preg_replace('%\p{Zs}*//(.*)%u', '', $subject);

如果您还想删除注释前面的任何空格换行符,请确保注释之前至少有1个空格(不要弄乱网址),您可以尝试以下操作:

$result = preg_replace('%\s+//.*%', '', $subject);

还要涵盖#条评论:

$result = preg_replace('%\s+(?://|#).*%', '', $subject);