Bir yazının başlığı ayrıştırmak için Regex

4 Cevap php

Ben bir sayfa kapmak için cURL kullanarak ve ben (gerçek metin bağlantısını değil, <a> başlık niteliği gösterilen) yazının başlığı ayrıştırmak istiyorum.

HTML bu gibi:

<li class="topic">
    <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/">Title of blog post</a>
</li>

Ben bu kodu kullanarak çalıştı:

preg_match('/<\a title=\".*\" rel=\"bookmark\" href=\".*\">.*<\/a>/', $page, $matches);

Ama çalışmıyor, PHP döner Array ( ) (boş bir dizi).

Herkes bana bunu regex tedarik edebilir? Ben Online jeneratörleri denedim ama doğru aklımdan geçiyor. Şerefe!

4 Cevap

Sizin ifade parantez ekle:

'/<a title=".*" rel="bookmark" href=".*">(.*)<\/a>/'

Arasındaki her şey ( ) dizide iade edilecektir.

Edit:

Sen tırnak işaretleri önce tüm backspaces kaldırmak zorunda.

Edit2:

Sadece documentation for preg_match görülen

matches sağlanır, o zaman arama sonuçları ile doldurulur. $ Karşılaşmalar [0] böylece tam desen, $ maçları 1 ilk yakalanan parantez dizilimi eşleşen metni olacak ve Bahisler metni içerecektir.

Ayrıca test your expression örnek metin ile gerçekten yapmak istediğiniz ne yapar emin olmak gerekir.

Eğer nitelik istediğiniz varsayarak, siz kullanabilirsiniz:

if (preg_match('/<a\s+[^>]*?\btitle="(.+?)"/', $page, $matches)) {
    echo $matches[1], "\n";
}

HTML Ayrıştırma yanıltıcı olabilir ve düzenli ifadeler genel durumunda iş kadar değildir olabilir. Basit, aklı başında belgeler için, onunla uzak alabilirsiniz.

Sadece bir çekiç ile bir vidayı sürüyorsun farkında olmak.

$str = '<li class="topic"> <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/"> Blog yazısı başlığı</a> </li>; `

echo strip_tags ($ str);

Verir:

Blog yazısı başlığı

Burada başka bir yolu var

$str = <<<A
<li class="topic">
    <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/">Title of blog post</a>
</li>
A;
$s = explode("</a>",$str);
foreach ($s as $a=>$b){
    if(strpos($b,"<a title")!==FALSE){
        $b=preg_replace("/.*<a title.*>/ms","",$b);
        print $b;
    }
}

çıktı

$ php test.php
Title of blog post