Как сопоставить часть тега <iframe>? - PullRequest
2 голосов
/ 03 сентября 2010

Я пытаюсь сопоставить выделенные части этой строки:

<b><iframe</b> maybe something here <b>src="http://some.random.url.com/"</b> and the string continues...

Мне нужно соответствовать src = "", если он находится внутри тега. Тег iframe можно разместить в любом месте источника.

Заранее спасибо! :)

Ответы [ 6 ]

14 голосов
/ 03 сентября 2010

Для этого вы должны использовать DOM-парсер. Вот пример с DOMDocument:

<?php
    $document = new DOMDocument();
    $document->loadHTML(file_get_contents('yourFileNameHere.html'));
    $lst = $document->getElementsByTagName('iframe');

    for ($i=0; $i<$lst->length; $i++) {
        $iframe= $lst->item($i);
        echo $iframe->attributes->getNamedItem('src')->value, '<br />';
    }
?>
3 голосов
/ 03 сентября 2010
<?php
$html='<iframe maybe somethin gere src="http://some.random.url.com/" and blablabla';

preg_match('|<iframe [^>]*(src="[^"]+")[^>]*|', $html, $matches);

var_dump($matches);

Вывод:

array(2) {
  [0]=>
  string(75) "<iframe maybe somethin gere src="http://some.random.url.com/" and blablabla"
  [1]=>
  string(33) "src="http://some.random.url.com/""
}

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

2 голосов
/ 29 января 2013

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

preg_match('<iframe.+?src="(.+?)".+?<\/iframe>', $iframe);

print_r($iframe);

array([0] => whole reg ex match, [1] => your src url);
2 голосов
/ 03 сентября 2010

Если у вас хорошо сформированный источник xml, вы также можете использовать xpath для поиска строки.

<?php
  $file = simplexml_load_file("file.html");
  $result = $file->xpath("//iframe[@src]/@src");
?>
1 голос
/ 03 сентября 2010

см. RegEx соответствует открытым тегам, за исключением автономных тегов XHTML

Тем не менее, ваша конкретная ситуация на самом деле не разбирается ... просто сопоставление строк.Методы для этого уже были перечислены до моего ответа здесь ...

1 голос
/ 03 сентября 2010

Вы должны использовать анализатор DOM, но это регулярное выражение поможет вам начать работу, если есть причина, по которой вы должны использовать регулярные выражения

.*(?<iframeOpening><iframe)\s[^>]*(?<iframeSrc>src=['"][^>'"]+['"]?).*

Кстати, он использует именованные группы захвата, вот как они работают*

preg_match('/.*(?<iframeOpening><iframe)\s[^>]*src=[\'"](?<iframeSrc>[^>\'"])+[\'"]?.*/', $searchText, $groups);
print_r($groups['iframeSrc']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...