тег привязки регулярного выражения - PullRequest
1 голос
/ 29 июля 2010

Я использую php, и у меня возникла проблема с анализом href из тега привязки с текстом.

пример: тег привязки, имеющий тест http://www.test.com

нравится <a href="http://www.test.com" title="test">http://www.test.com</a>

Я хочу сопоставить весь текст в теге привязки

спасибо заранее.

Ответы [ 3 ]

6 голосов
/ 29 июля 2010

Использование DOM :

$text = '<a href="http://www.test.com" title="test">http://www.test.com</a> something else hello world';
$dom = new DOMDocument();
$dom->loadHTML($text);

foreach ($dom->getElementsByTagName('a') as $a) {
    echo $a->textContent;
}

DOM специально разработано для анализа XML и HTML.Это будет более надежно, чем любое решение для регулярных выражений, которое вы можете придумать.

0 голосов
/ 29 июля 2010

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

<a [^>]*href="([^"])"[^>]*>

Если вы хотите извлечь содержимое тега и знаете, что делаетеНетрудно написать простой парсер рекурсивного спуска с использованием каскадных регулярных выражений, который будет анализировать все, кроме самых патологических случаев.К сожалению, PHP не является хорошим языком для изучения того, как это сделать, поэтому я бы не рекомендовал использовать этот проект, чтобы узнать, как это сделать.

Так что, если вам нужно содержимое, а не атрибут, тогда @katrielalex прав: не разбирайте HTML с регулярным выражением.Вы столкнетесь с целым миром вложенных тегов форматирования и другого легального HTML, который не совместим с регулярными выражениями.

0 голосов
/ 29 июля 2010

Если вы хотите выбрать текст ссылки якорной ссылки с этим href, то что-то вроде этого должно работать ...

$input = '<a href="http://www.test.com" title="test">http://www.test.com</a>';
$pattern = '#<a href="http://www\.test\.com"[^>]*>(.*?)</a>#';

if (preg_match($pattern, $input, $out)) {
    echo $out[1];
}

Это технически не идеально (теоретически> может использоваться в одном из тегов), но будет работать в 99% случаев. Как уже упоминалось в нескольких комментариях, вы должны использовать DOM.

...