Использование регулярных выражений с XML - PullRequest
1 голос
/ 28 апреля 2011

Я пытаюсь использовать регулярные выражения для извлечения CDATA из следующего XML-канала: http://www.patrickarundell.net/THREE-IE-FEED.asp

Мой код выглядит следующим образом:

<code>$xml = file_get_contents('http://www.patrickarundell.net/THREE-IE-FEED.asp');

$arr = array();
preg_match('/(CDATA)(.*)/', $xml, $arr);
echo '<pre>';
    print_r($arr);
echo '
';

Вывод:

Array
(
    [0] => CDATA[
    [1] => CDATA
    [2] => [
)

Я знаю, что у меня не совсем правильное регулярное выражение, но когда я пытаюсь сделать следующее утверждение:

preg_match('/(<![CDATA[)(.*)/', $xml, $arr);

Я получаю сообщение об ошибке:

Предупреждение: preg_match () [function.preg-match]: Ошибка компиляции: отсутствует завершение] для класса символов со смещением 15

Я подумал, что это может дать мне подробности после квадратной скобки '[', и это то, что я ищу.

Любая помощь приветствуется, я пробовал это в течение нескольких часов и безуспешно.

1 Ответ

3 голосов
/ 28 апреля 2011

Причина сообщения об ошибке в том, что в нем отсутствует закрывающая ] для класса символов.Но вы не хотели определять класс символов с помощью [, который вы хотите сопоставить, поэтому вам не нужно избегать его \[.

<!\[(CDATA)\[\s*(.*?)\s*\]\]>

Я тестировал его здесь на regexr

.*? - не жадное совпадение, оно соответствует как можно меньшему количеству, пока не найдет закрывающий ]]>.

...