正则表达式,单引号或双引号

时间:2009-11-22 15:23:23

标签: php regex

我有这个正则表达式:

preg_replace(
    '/\["'.$key.'"\] = (.+?);/is', '["'.$key.'"] = '.$newValue.';',
    $contents);

它在配置文件中写入数组值。我需要在数组键周围允许单引号或双引号,我不知道该怎么做。我没有写这个正则表达式。

3 个答案:

答案 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匹配使用的第一种报价