2010-06-15 6 views
0

Я хочу, чтобы соответствовать как СРК и названия атрибутов тега изображения:PHP регулярное выражение подшаблон поведение

картина:

<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

+1

Вы используете preg_match? Можете ли вы дать полную строку, которую вы тестируете? Знаете ли вы порядок, в котором будет источник и название? И последнее, но не менее важное: знаете ли вы о группах регулярных выражений и как получить доступ к захваченным переменным? –

+2

Это регулярное выражение не так во многих отношениях. Первое, что всплывает, '' 'посередине -' 'title' - разделяет регулярное выражение на два. '" title = 'hello' "' будет ** полным совпадением **, даже вне тега ''. Далее, '[^" | \ '] + 'должно быть' [^ "'] +' (или '[^" \ '] + ', если вы избегаете строку, а не регулярное выражение). Наконец, есть лучшие варианты для синтаксического анализа html в php, чем регулярные выражения. – Kobi

+0

Спасибо за ответы. Мне просто нужно заставить это работать. Я не являюсь мастером регулярных выражений и в основном адаптировал регулярное выражение, написанное кем-то еще. Его для очень конкретного случая, когда я могу убедитесь, что src появится перед заголовком. Полная строка - это тег img, который я опубликовал. И да, я использую preg_match. Моя цель состоит в том, чтобы заголовок отображался как соответствие подшаблона. – codecowboy

ответ

1

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

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

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

3

Вы не можете анализировать 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"; 
+0

+1, прочитайте это, не убежден: http://www.codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html – greg0ire

Смежные вопросы