PHP, preg_match, Düzenli İfade.

4 Cevap php

İşte eşleştirmek istediğiniz deseni:

<div class="class">
<a href="http://www.example.com/something"> I want to be able to capture this text</a>
<span class="ptBrand">

Bu ben yapıyorum budur:

$pattern='{<div class="productTitle">[\n]<((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)>([^\n]*)</a>[\n]<span class="ptBrand">}';

preg_match($pattern, $data, $matches,PREG_OFFSET_CAPTURE);

print_r($matches);

Bu yazdırır:

Array ()

4 Cevap

Genel bir kural olarak, normal ifadeler ayrıştırma HTML gerçekten kötü bir araçtır. Onlar güvenilmez konum ve gerçekten karmaşık olmak sonuna kadar eğilimindedir. Bir çok daha sağlam bir çözüm, bir HTML çözümleyici kullanmaktır. Bkz Parse HTML With PHP And DOM.

Lütfen ifadesi olarak, ben <div class="productTitle" her yerde kaynak yüzden orada başlamak istiyorum görmüyorum. Aynı şekilde bir URL ayrıştırmak için çalışıyoruz ama orada çapa etiketi (doğrudan ya da yeterli bir joker yoluyla) hiçbir söz var bu yüzden orada çok başarısız olacak. Temelde bu ifade ayrıştırmak için çalışıyoruz HTML gibi bir şey görünmüyor.

... Ya da bu:

preg_match('/\s*([^>]+)\s*<\/a/',$string,$match);

Bunu da düzeltir.

Desen:

/<div class="class">\s*<a href=\"([^"]+)\">([^<]+)</a>/m

Link almak ve kabaca metin, ancak DOM kitaplığı kullanarak çok daha iyi bir yöntem olacaktır olurdu.

Bu deneyebilirsiniz:

<a href=".*?">([\s\S]*?)</a>