Регулярное выражение | PHP фиксирует каждую недопустимую двойную кавычку в строке jsonPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Регулярное выражение | PHP фиксирует каждую недопустимую двойную кавычку в строке json

Сообщение Гость »


Для получения следующей строки json: {"key":"value"ue","other":"invalid ""quo"te"

Я хочу зафиксировать каждую недопустимую двойную кавычку внутри значений. В примере есть одна двойная кавычка в значении свойства key и три двойные кавычки в свойстве Other.

Я видел несколько комментариев, в которых отмечалось, что это неверный json (правильный) и что предоставленный json должен быть действительным перед получением. Однако в моем случае это невозможно.

Предполагая, что это произойдет только со значениями, а не с ключами, я думаю, можно с уверенностью предположить, что начальной последовательностью будет двоеточие, за которым следует двойная кавычка. Завершающей последовательностью будет двойная кавычка, за которой следует запятая ИЛИ закрывающая фигурная скобка.

Я попробовал следующее регулярное выражение (среди многих других версий), которое является наиболее близким к моему желаемому решению:

/:\s?".*?(").*?[,}]/i

Это правильно фиксирует одну двойную кавычку в свойстве key, но фиксирует только первую двойную кавычку в свойстве «other». Я бы хотел, чтобы он захватывал две другие двойные кавычки, а также отдельный захват.

Еще одно регулярное выражение, которое я пробовал: /:\s?".*?("{1,})[^,}].*?[,}]/i Это делает то же самое, что и первое регулярное выражение, но захватывает две двойные кавычки за один захват (не желательно)

Моя цель в конечном итоге — захватить каждую двойную кавычку отдельно, поэтому получается четыре захвата. Что, по моему мнению, мне нужно для достижения этой цели, так это способ сделать группу захвата «жадной»? чтобы он не останавливался на первой двойной кавычке.

Как я могу этого добиться?

Для проверки регулярного выражения я использую следующий PHP-код:
$text = '{"key":"value"ue","other":"invalid ""quo"te"}'; $pattern = '/:\s?".*?(").*?[,}]/i'; preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE); эхо '' . print_r($соответствует, правда) . '';
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»