如何跳过特定行preg_replace-PHP
我制作了一个小函数,用于从字符串中删除额外的空格如何跳过特定行preg_replace-PHP,php,regex,Php,Regex,我制作了一个小函数,用于从字符串中删除额外的空格 /* remove white space */ function wspace($string){ $string = preg_replace( '/\s+/', ' ', $string); return $string; } 它工作得很好,但我的问题如下; 如果我打算在js字符串上使用此函数,那么包含以下逗号的行 // will brake js output, 范例 $js_string .="
/* remove white space */
function wspace($string){
$string = preg_replace( '/\s+/', ' ', $string);
return $string;
}
它工作得很好,但我的问题如下;
如果我打算在js字符串上使用此函数,那么包含以下逗号的行
// will brake js output,
范例
$js_string .="
window.addEvent('load', function(){
new Drop({
container:'container',
offset: ".$offset.", // top menu offset
width:200
});
});
";
echo wspace( $js_string );
这将输出
window.addEvent('load', function(){ new Drop({ container:'container',offset: ".$offset.", // top menu offset width:200 }); });";
在/
我将如何跳过这些行或用/*
或任何不会弄乱其余代码的内容替换这些行
我知道用/*
注释*/
替换/
是应该做的,但我正在更新我广泛使用的旧脚本,我不知道用户是否有/
或/*
注释*/
。所以为了不破坏别人的代码,我需要在发布这个之前确定一下
我想做一些像
或者任何你认为能让这个功能更安全的东西
感谢您的帮助。谢谢大家! 你可以试试这个。可以将数组作为模式并替换
function wspace($string){
$string = preg_replace( array('/[^:]\/\/.*$/m','/\/\*.*\*\//U', '/\s+/'), array('','',' '), $string);
return $string;
}
编辑:
如果还要删除/*…*/脚本中的注释,您可以使用
function wspace($string){
echo $string;
$string = preg_replace( array('/[^:]\/\/.*$/m','/\/\*.*\*\//U', '/\s+/'), array('','',' '), $string);
return $string;
}
注意:我没有在真正的javascript函数上测试这些函数。编辑:使其安全。您可以使用以下模式:
$pattern=我正在测试它,但还是有什么东西把它弄乱了。啊,发现了问题,有一个包含的变量,所以我得到var sp='http:var tp='它实际上适用于所问的问题,所以你是对的,我如何跳过http://?好的,额外的空间有助于找到类似//space comment和not//comment的注释,它将var留给http://aloneThat这是一些优秀的正则表达式Casimir(一如既往)。我特别喜欢用(?!\1)[“]”)*\1
来模拟字符类的否定。+1@AmalMurali:谢谢你,也谢谢你的编辑!不过这个模式可以简化。我会改正的。
function wspace($string){
echo $string;
$string = preg_replace( array('/[^:]\/\/.*$/m','/\/\*.*\*\//U', '/\s+/'), array('','',' '), $string);
return $string;
}
$result = preg_replace_callback($pattern, function ($m) {
return ($m[2]) ? '/* ' . trim($m[2]) . ' */' : ' ';
}, $data);
print_r($result);