php Regex linkleri içerisinde rel özniteliği metin çıkarmak

5 Cevap php

rel özniteliği metin kapmak için gerçekten çok kolay bir yolu var yani

<a href='#' rel='i want this text here'></a>.

Ben regex ile bu sabah denedim ama hayır şans yaşıyorum.

5 Cevap

Bu çalışması gerekir:

preg_match_all('%<a[^>]+rel=("([^"]+)"|\'([^\']+)\')[^>]*>%i', $html, $matches);
print_r($matches);

Başkaları tarafından dedi, onun normal değil gibi HTML ayrıştırma için regex kullanmaktan kaçınmalısınız. Ama HTML yapısı regex kullanabilirsiniz emin iseniz. Aşağıdaki program, istediğiniz şeyleri ayıklamak olacak:

<?php
$a = "<a href='#' rel='i want this text here'></a>";

if(preg_match("{<a href.*?rel='(.*?)'.*?>}",$a,$matches)) {
        echo $matches[1]; // prints i want this text here
}
?>

Diğer posterler gibi işaret var: Birçok şeyler, html ayrıştırma için regex kullanmak gerçekten kötü bir fikir yanlış gidebilir ve daha fazla destek yapmak gerekir. (Pekka yorumuna bak!)

Burada bazı değer katmak için ben her rel niteliğini almanın tam örneğini postet:

<?php
$html = "<a href='#' rel='i want this text here'></a>";

$dom = new DomDocument();
$dom->loadHtml($html);

$xpath = new DomXPath($dom);
$refAttributes = $xpath->query("//a[@rel]");
// ^^ This means: Get my every <a...></a> that has a rel attribute

foreach($refAttributes as $refAtt) {
    var_dump($refAtt->getAttribute("rel"));
}

Ve ek okuma için bir deneyebilirsiniz:

http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html

http://kore-nordmann.de/blog/0081_parse_html_extract_data_from_html.html

Do not use regular expressions for irregular languages like HTML. Sen XPath kullanarak elde edebilirsiniz. Örnek:

$doc = new DOMDocument();
$doc->loadHtml($htmlAsString);
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query('//a[@rel]');