2013-09-10 3 views
0

Если струнаRegex - Найти матч, который находится внутри матча

<li>Your browser may be missing a required plug-in contained in <a href="http://get.adobe.com/reader/">Adobe Acrobat Reader</a>. Please reload this page after installing the missing component.<br />If this error persists, you can also save a copy of <a href="test.pdf"> 

Регулярное выражение я написал

/href=.*?.pdf/ 

В результате захвата первого «HREF» и заканчивая ' .pdf. Мне нужно, чтобы он начинался со второго href. Другими словами, он должен только захватить href, который заканчивается на .pdf

Как мне это сделать с помощью регулярного выражения?

+3

** Не используйте регулярные выражения для анализа HTML. Используйте подходящий модуль синтаксического анализа HTML. ** Вы не можете надежно проанализировать HTML с регулярными выражениями, и вы столкнетесь с печалью и разочарованием в будущем. Как только HTML изменится с ваших ожиданий, ваш код будет сломан. См. Http://htmlparsing.com/php или [этот поток SO] (http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-php) для примеры правильного анализа HTML с PHP-модулями, которые уже были написаны, протестированы и отлажены. –

ответ

2

Вы можете попробовать это регулярное выражение:

/href=[^>]+\.pdf/ 

regex101 demo

Большую часть времени, когда вы можете избежать .* или .+ (или их ленивые версии), это лучше :)

Рекомендуем также , не забывайте избегать периодов.

2

Вы должны использовать DOM вместо использования регулярного выражения для анализа HTML или XML. В PHP есть класс DOMDocument:

$doc = new DOMDocument(); 
$doc->loadHTML('<li>Your browser may be missing a required plug-in contained in <a href="http://get.adobe.com/reader/">Adobe Acrobat Reader</a>. Please reload this page after installing the missing component.<br />If this error persists, you can also save a copy of <a href="http://www.police.vt.edu/VTPD_v2.1/crime_stats/crime_logs/data/VT_2011-01_Crime_Log.pdf">'); 

$links = $doc->getElementsByTagName('a'); 
foreach($links as $link) { 
    echo $link->getAttribute('href'); 
} 
+0

Проблема в том, что иногда мне нужно захватить ссылку из Javascript. (т. е. document.location.href ...) – dudemanbearpig

+0

javascript также имеет методы dom – hek2mgl

+0

В браузере это еще проще: просто положитесь на 'document.links'. – bart

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