Php 正则表达式:替换两个字符串之间的所有内容,但不替换开始/结束字符串
我不是RegEx最好的。。。我有一些PHP代码:Php 正则表达式:替换两个字符串之间的所有内容,但不替换开始/结束字符串,php,regex,Php,Regex,我不是RegEx最好的。。。我有一些PHP代码: $pattern = '/activeAds = \[(.*?)\]/si'; $modData = preg_replace($pattern,'TEST',$data); 我有一个JavaScript文件,它声明和数组: var activeAds = []; 我需要它来用我的字符串填充数组,或者如果数组中已经有一个字符串,我想用我的字符串替换它(在本例中为“TEST”) 现在,我的正则表达式正在替换一切,包括我的开始和结束,我只需要替换
$pattern = '/activeAds = \[(.*?)\]/si';
$modData = preg_replace($pattern,'TEST',$data);
我有一个JavaScript文件,它声明和数组:
var activeAds = [];
我需要它来用我的字符串填充数组,或者如果数组中已经有一个字符串,我想用我的字符串替换它(在本例中为“TEST”)
现在,我的正则表达式正在替换一切,包括我的开始和结束,我只需要替换两者之间的内容
我只剩下:
var TEST;
TIA您可以捕获要更换的零件之前和之后的内容:
$pattern = '/(activeAds = \[).*?(\])/si';
捕获这些零件后,您可以保留它们并替换中间的零件:
$modData = preg_replace($pattern, '\1TEST\2', $data);
有很多方法可以做到这一点,我的方法如下:
$data = array("activeAds = testing123");
$pattern = "/activeAds\s?=\s?(.*)/";
$result = preg_replace($pattern,"activeAds = TEST", $data);
var_dump($result);
编辑:忘记提到这里的
\s?
允许一个可选的空格。这是否意味着你只想用字符串替换数组的内容,而不管其中有什么?我想警告你,JS太复杂了,无法用regex解析。您可能很容易遇到麻烦(例如,如果存在任何嵌套activeAds=[1[1,2]]
,或者存在不同的变量,如my\u-activeAds=…;other\u-activeAds=…
,则会将一切都搞糟)。有很多东西可能会坏掉。。。。即使是简单的事情,比如当你期望一个空间可以打破东西时,有多个空间。。。只有这样,如果你知道代码看起来是什么样子,即使这样,也可以考虑使用<代码> \b/COD>。谢谢,你认为这是最好的方法吗?我在想我应该使用更简单的方法,或者使用lookahead/lookbehind,这其实没有必要,因为您的捕获组匹配常量字符串。您可以在使用OP的$pattern
时轻松地执行:$modData=preg\u replace($pattern,'activeAds=[TEST]”,$data)
。JoelGrannas,我认为环顾四周比这更复杂(而且通常也更慢)。但是,请注意问题的注释-这是非常不安全的,除非您确定这正是您始终需要分析的字符串。@NullUserException,起初我曾想过这样做,但我认为如果没有其他内容,键入它会更容易。