Извлечь имя = значение содержимого из тегов комментариев HTML - PullRequest
0 голосов
/ 02 декабря 2011

Я пытаюсь получить контент из некоторых тегов Craigslist в PHP / Codeigniter.Теги, которые мне нужно проанализировать, выглядят так:

<!-- CLTAG xstreet0=Inman -->
<!-- CLTAG xstreet1=Moscrop -->
<!-- CLTAG city=Burnaby -->
<!-- CLTAG region=BC -->

Для каждого из этих тегов, которые содержатся в переменной $ content, я бы хотел получить каждую пару имя / значение.К большому сожалению, я ДУМАЮ с регулярными выражениями, но до сих пор это, по крайней мере, находит начальную строку одного из тегов:

<code>$pattern = '/<!-- CLTAG city=/';
preg_match($pattern, $content, $matches);
echo "<pre>";
print_r($matches);
echo "
";

Где я застрял сейчасвытащить пару имя / значение, чтобы у меня были «city» и «burnaby» для работы. То же самое для каждого из остальных. Я подозреваю, что substr или что-то здесь?

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Вы можете немного упростить свою жизнь, добавив константу "PREG_SET_ORDER" и preg_match_all() вместо preg_match() примерно так:

$content = "
<!-- CLTAG xstreet0=Inman -->
<!-- CLTAG xstreet1=Moscrop -->
<!-- CLTAG city=Burnaby -->
<!-- CLTAG region=BC -->
";

$pattern = '/<!--\sCLTAG\s([^=]+)=([^\s]+)\s-->/';
preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

foreach ($matches as $match) {
  echo 'key: ' . $match[1] . ' | value: ' . $match[2] . "\n";
}

Если вы столкнулись со сценарием, в котором не было указано значение "xstreet1" (поскольку адреса могут работать таким образом), вам необходимо немного изменить шаблон регулярного выражения и добавить проверку, чтобы убедиться, что вторая группа существует в вашем цикле:

$pattern = '/<!--\sCLTAG\s([^=]+)=([^\s]+)?\s-->/';
preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

foreach ($matches as $match) {
  echo 'key: ' . $match[1] . ' | value: ';
  echo empty($match[2]) ? 'N/A' : $match[2];
  echo "\n";
}

Обратите внимание, как есть '?' добавлено после второй группы захвата в регулярном выражении. Это говорит компилятору регулярного выражения, что эта группа может встречаться или не встречаться.

1 голос
/ 02 декабря 2011
$pattern = '/<!-- CLTAG ([^=]+)=([^\s]+) -->/';

preg_match($pattern, $content, $matches);

$ совпадений [1] должно быть равно вашему атрибуту, а $ совпадений [2] должно быть равно вашему значению.

Я угадал фильтры на основе предоставленных вами данных, они могутнужно настроить.

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