我有一个字符串,它是一个PHP代码示例,其中包含以下代码段:
$data = array(
'cKey1' => "dsfaasdfasdfasdfasdf",
'cKey2' => "asdfasdfasdfadsfasdf",
...
);
目前,我只是在两个硬编码密钥上执行str_replace
,但我现在需要更灵活。这是我到目前为止提出的两个正则表达式:
(?<=cKey1' => ).+(?=,)
(?<=cKey2' => ).+(?=,)
但是,由于有些人不使用空格,使用双引号等,这不是一个理想的解决方案。有人可以用更好的方式指出我以更有效的方式替换cKey1
和cKey2
的值吗?
谢谢!
答案 0 :(得分:1)
要么像@Casimir那样使用标记器,要么(如果你坚持使用正则表达式),你可以拿出来......如下:
$regex = "~
'cKey\d+' # search for cKey followed by a digit
.+? # match everything lazily
([\"']) # up to a single/double quote (capture this)
(?P<string>.*?) # match everything up to $1
\1 # followed by the previously captured group
~x";
preg_match_all($regex, $your_string, $matches);
如果您想用某物替换它,请考虑使用preg_replace_callback()
,但您不清楚预期的输出。
见a demo on regex101.com。感谢@WiktorStribiżew在评论中做出澄清。
答案 1 :(得分:1)
您可以使用\K
(匹配重置功能):
$re = array("/'cKey1'\s*=>\s*\K[^,]*/", "/'cKey2'\s*=>\s*\K[^,]*/");
$repl = array('"foo"', '"bar"')
echo preg_replace($re, $repl, $str);
<强>输出:强>
$data = array(
'cKey1' => "foo",
'cKey2' => "bar",
...
);