Регулярное выражение для разбора JSON - PullRequest
0 голосов
/ 06 января 2010

Мне нужна помощь в написании регулярного выражения для этого шаблона в PHP:

[[{"type":"media","view_mode":"small","fid":"1","attributes":{"width":0,"height":0,"src":"http://localhost/x.png"}}]]

Это часть текста, и я пытаюсь заменить это чем-то другим.

Хотел бы использовать preg_replace_all(), но не могу понять, какой будет модель. Любая помощь приветствуется.

Ответы [ 2 ]

3 голосов
/ 06 января 2010

Поскольку вы говорите, что вам нужно идентифицировать эти JSON-строки внутри обычной строки, вы можете использовать этот шаблон:

'/\[\[.*?]]/s'

значение:

\[\[    # match two consecutive '['-s
.*?     # reluctantly match any character
]]      # match two consecutive ']'-s

Из-за флага s, . в регулярном выражении также будет соответствовать разрывам строк.

Демо-версия:

$text = '<p>blahhah blahaa blahhah blahaablahhah blahaablahhah 
    blahaablahhah blahaablahhah blahaablahhah blahaablahhah 
    blahaablahhah blahaa [[{"type":"media","view_mode":"small",
    "fid":"1","attributes":{"width":0,"height":0,"src":
    "localhost/d7mw/sites/…;}}]] more blah more blah more blah 
    more blahmore blah more blahmore blah more blahmore blah 
    more blahmore blah more blahmore blah more blahmore blah 
    more blahmore blah more blahmore blah more blahmore blah 
    more blah</p>';
preg_match_all('/\[\[.*?]]/s', $text, $matches);
print_r($matches);

который выдаст:

Array
(
    [0] => Array
        (
            [0] => [[{"type":"media","view_mode":"small",
    "fid":"1","attributes":{"width":0,"height":0,"src":
    "localhost/d7mw/sites/…;}}]]
        )

)
2 голосов
/ 06 января 2010

Это похоже на данные в кодировке JSON, которые можно аккуратно проанализировать с помощью json_decode и снова соединить с помощью json_encode . Здесь не нужно регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...