Regex, одиночная кавычка или двойная кавычка

У меня есть это регулярное выражение:

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

Он записывает значение массива в файл конфигурации. Мне нужно разрешить одиночные или двойные кавычки вокруг ключа массива, и я не уверен, как это сделать. Я не писал это регулярное выражение.

Вы можете заменить регулярное выражение «найти», чтобы соответствовать обоим типам котировок:

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

Это будет даже соответствовать:

 ["MegaKey'] = UberValue; 

И если бы я был вами, я бы поместил этот файл конфигурации в список вещей, чтобы переписать без регулярных выражений.

Обычный способ обработки нескольких стилей цитирования состоит в том, чтобы записать их: /'a'|"a"/ , дублируя то, что находится внутри кавычек, хотя оно может очень немного отличаться (например, чтобы запретить одиночную кавычку в пределах строка с одним кавычком.

 '/\[("'.$key.'"|\''.$key.'\')\] = (.+?);/is' 

Вы также можете использовать обратную ссылку:

 '/\[([\'"])'.$key.'\\1\] = (.+?);/is' 

Ну, вы можете сделать обратную ссылку, чтобы соответствовать правильному набору использованных котировок (открыт с двойным, закрытым с двойным)

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

\\1 соответствует используемому типу первого типа