Поведение регулярных выражений в PHP - PullRequest
0 голосов
/ 15 июня 2010

Я хочу сопоставить атрибуты src и title тега изображения:

рисунок

<img [^>]*src=["|\']([^"|\']+["|\'])|title=["|\']([^"|\']+)

цель:

<img src="http://someurl.jpg" class="quiz_caption" title="Caption goes here!">

Этот шаблон дает мне одно нежелательное совпадение, title = "content", и совпадение, которое я на самом деле хочу, это значение между кавычками после слова "title", т.е. "content".

Итак, мои совпадения:

<img src="http://someurl.jpg
http://someurl.jpg
title="Caption goes here!"
Caption goes here!

Есть ли способ избежать третьего из этих матчей? Я использую PCRE в PHP 5.2.x

Ответы [ 2 ]

3 голосов
/ 15 июня 2010

Нельзя анализировать HTML с регулярными выражениями, если вы не знаете, что имеете дело с подмножеством HTML.Ваше регулярное выражение, даже если оно правильное, завершится ошибкой, например, если какой-либо из атрибутов будет иметь символ >.

С расширением DOM:

<?php
$target = <<<EOD
<img src="http://someurl.jpg" class="quiz_caption" title="Caption goes here!">
EOD;

$d = new DOMDocument();
$d->loadHTML($target);
$img = $d->getElementsByTagName("img");

echo $img->item(0)->getAttribute("src") . "\n";
echo $img->item(0)->getAttribute("title") . "\n";
1 голос
/ 15 июня 2010

Если вы точно знаете, что ищете, вы можете попробовать это:

src="(.+?)"|title="(.+?)"

Я бы также порекомендовал вам поиграть на http://gskinner.com/RegExr/, который является онлайн-регестром во флэш-памяти.... он может помочь вам улучшить ваши знания, а также имеет множество готовых выражений сообщества.

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