我有这个正则表达式:
preg_replace(
'/\["'.$key.'"\] = (.+?);/is', '["'.$key.'"] = '.$newValue.';',
$contents);
它在配置文件中写入数组值。我需要在数组键周围允许单引号或双引号,我不知道该怎么做。我没有写这个正则表达式。
答案 0 :(得分:5)
处理多种引用样式的常用方法是拼出它们:/'a'|"a"/
,复制引号内的内容,尽管它可能略有不同(例如在单个内容中禁止未转义的单引号引用字符串。
'/\[("'.$key.'"|\''.$key.'\')\] = (.+?);/is'
您有时也可以使用反向引用:
'/\[([\'"])'.$key.'\\1\] = (.+?);/is'
答案 1 :(得分:2)
您可以替换“find”正则表达式以匹配两种类型的引号:
'/\[[\'"]'.$key.'[\'"]\] = (.+?);/is'
这甚至会匹配:
["MegaKey'] = UberValue;
如果我是你,我会把这个配置文件放在要重写的东西列表中而不用正则表达式。
答案 2 :(得分:1)
好吧,你可以进行反向引用以匹配使用的正确引号组(用double打开,用double关闭)
preg_replace(
'/\[([\"\']+)'.$key.'\\1\]\s=\s(.+?);/is', '[\\1'.$key.'\\1] = '.$newValue.';',
$contents);
\\1
匹配使用的第一种报价