Php 正则表达式:替换两个字符串之间的所有内容,但不替换开始/结束字符串

Php 正则表达式:替换两个字符串之间的所有内容,但不替换开始/结束字符串,php,regex,Php,Regex,我不是RegEx最好的。。。我有一些PHP代码: $pattern = '/activeAds = \[(.*?)\]/si'; $modData = preg_replace($pattern,'TEST',$data); 我有一个JavaScript文件,它声明和数组: var activeAds = []; 我需要它来用我的字符串填充数组,或者如果数组中已经有一个字符串,我想用我的字符串替换它(在本例中为“TEST”) 现在,我的正则表达式正在替换一切,包括我的开始和结束,我只需要替换

我不是RegEx最好的。。。我有一些PHP代码:

$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,起初我曾想过这样做,但我认为如果没有其他内容,键入它会更容易。