С помощью PHP preg_match_all получить значение href - PullRequest
2 голосов
/ 03 января 2011

Я не совсем понимаю, как работают регулярные выражения даже после прочтения этого урока http://www.webcheatsheet.com/php/regular_expressions.php

Вот что мне нужно найти:

<link type="text/html" rel="alternate" href="http://link"/>

И оно должно вернуться:

http://link

Вот что я попробовал:

$find = preg_match_all(
    '/<link type="text/html" rel="alternate" href=".*',
    $file,
    $patterns2
);

Вы можете смеяться:)

Заранее спасибо за вашу помощь и ваше время:)

Ответы [ 3 ]

3 голосов
/ 03 января 2011

используя simplexml

$html = '<link type="text/html" rel="alternate" href="http://link"/>';
$xml  = simplexml_load_string($html);
$attr = $xml->attributes();

используя dom

$dom = new DOMDocument;
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('link');
$attr  = $nodes->item(0)->getAttribute('href');
3 голосов
/ 03 января 2011

Синтаксический анализ (X) HTML с регулярным выражением почти наверняка неверен .Используйте выделенный анализатор XML.Есть много доступных для php.

2 голосов
/ 03 января 2011

Вы должны заключить нужный фрагмент текста в скобки, например (.*), то есть то, что будет возвращено

Этот работает для меня

<?php
preg_match_all('/<link type="text\/html" rel="alternate" href="(.*)"\/>/','<link type="text/html" rel="alternate" href="http://link"/>',$patterns2);
print_r($patterns2);
?>
...