如果存在,替换php中的字符串

时间:2013-03-28 14:17:41

标签: php string replace

我在php中有一个看起来像这样的字符串

$(window).load(function(){
  $('.someclass').click(function () {
    $(this).text("clicked");
  });
});

我想要的是 - 如果字符串包含$(window).load(function(){,那么用空字符串});替换它以及结束括号""

但如果$(window).load(function(){不存在则不做任何事。

以下是我的尝试:

if(strpos($str,"$(window).load(function(){") == -1){
  // do nothing
}
else{
     str_replace("$(window).load(function(){","",$str);
     // how do i replace the last }); with ""
}

5 个答案:

答案 0 :(得分:1)

如果你能保证}),你需要这个正则表达式;将是最后一个。如果是这样的话:

$str = preg_replace("#\$\(window\)\.load\(function\(\) \{(.*)\}\);#is","",trim($str));

应该做的伎俩。

如果你不能保证});你想要替换将是最后一次出现,你将需要遍历你的代码并计算大括号。别无他法,遗憾的是: - (

答案 1 :(得分:1)

如果你的代码很好地缩进,那么这可能对你有用:

$str = <<<EOM
$(window).load(function(){
  $('.someclass').click(function () {
    $(this).text("clicked");
  });
});
EOM;

$start = preg_quote('$(window).load(function(){');
$end = preg_quote('});');

$new = preg_replace("/^$start\s*(.*?)^$end/ms", '$1', $str);

print_r($new);

答案 2 :(得分:0)

$str = substr($str, 0, strlen($str) - 4);

这将删除字符串的最后3个字符。

答案 3 :(得分:0)

使用strrpos查找最后一次出现的位置?那么也许从这一点开始str_replace,限制为1?您应该通过外部调用JSlint来检查修改后的字符串,以确保您没有创建格式错误的代码。

答案 4 :(得分:0)

我认为,一种工作方式只是测试(window).load,并添加此内容:

str_replace('$(window).load', "var functionOnLoad = ", $str);

如果要执行此功能,请不要忘记添加对此功能的调用。有些想法:

str_replace('</script>', "functionOnLoad();</script>", $str);