Мне нужно удалить« -s, что делает неверный json, как это сделать в php regex?php regex Удалить «-s from string
"имя": "Стейк "аи четырех"",
в этой ситуации REMOVE "а.е. Четыре" -s "цитирует
Мне нужно удалить« -s, что делает неверный json, как это сделать в php regex?php regex Удалить «-s from string
"имя": "Стейк "аи четырех"",
в этой ситуации REMOVE "а.е. Четыре" -s "цитирует
Это код PHP, чтобы соответствовать две цитаты в цитате:
$re = "/^\"name\": \"[^\"]*?(\")*?[^\"]*?(\")*?[^\"]*?\"$/";
$str = "\"Steak \"au Four\" \"";
preg_match($re, $str, $matches);
он работает, но «имя:» должно быть в regex, вы можете сделать это со мной, я новичок –
@NaomiNaomi Я добавил это к началу сейчас. Но вы понимаете, что это заменяет только одну пару кавычек после этой строки «имя»: «** здесь **' »' – ib11
(я также сделал это необязательным сейчас.) Я согласен, хотя с ответом @ sevavietl ниже, чтобы попытаться используйте 'str_replace()', который заменит все экземпляры кавычек в 'value'. – ib11
Там нет смысла матча кавычки с регулярным выражением для замены, потому что единственное, что вы в конечном итоге получите, это сами кавычки.
На самом деле, это не совсем так, как вы можете получить их вместе с индексами, передавая PREG_OFFSET_CAPTURE
в качестве четвертого параметра в preg_match()
(вы можете увидеть в documentation).
Но, если есть более двух двойных котировок. В этом случае регулярное выражение будет более сложным. Затем вы преобразуете строку в массив с помощью str_split()
, чтобы вы могли отключить элементы по индексу. И, наконец, преобразуйте массив в строку снова с join()
или implode()
, объединив элементы вместе.
Мне кажется, что проще взять всю ценность, а затем заменить котировки str_replace()
. В вас случае вы можете сделать что-то вроде этого:
$jsonLine = "\"name\":\"Steak \"au Four\" \"";
$jsonLine = trim($jsonLine);
$pattern = '/^(?P<name>"name"\s*:\s*)(?P<value>".*".*")$/';
if (preg_match($pattern, $jsonLine, $matches) === false) {
exit('Pattern not matched');
}
$name = $matches['name'];
$value = trim(str_replace('"', '', $matches['value']));
$newJsonLine = "$name\"$value\"";
echo $newJsonLine;
Вы можете увидеть демо here.
Я отформатировал ваш вопрос, чтобы он был более читабельным. У вас есть код, который вы уже пробовали? Вы также должны опубликовать это здесь, используя ссылку редактирования по вашему вопросу. – ib11