我正在尝试使用preg_replace
删除字符串中以//
开头的任何行。
到目前为止,我的代码:
$str = preg_replace('#^//(.*)?$#', '', $str);
它没有删除任何内容。
答案 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);