Ben yeni bir değişken haline <h1><h2>etc
etiketleri tüm metin ayıklamak nasıl HTML, bir sürü içeren bir dize.
Muhtemelen preg_match_all kullanarak ve tek bir virgülle ayrılmış değişken eşleşmeleri gönderiyor.
Teşekkürler çocuklar.
Aslında normal ifadeler kullanmak istiyorsanız, ben düşünüyorum:
preg_match_all('/<h[0-6]>([^</h[0-6]>*)</h/i', $string, $matches);
sürece başlık etiketleri iç içe değil gibi çalışması gerekir. Diğerleri söylediler gibi HTML kontrol değilseniz, düzenli ifadeler bunu yapmak için harika bir yol değildir.
Öncelikle düzenli ile HTML (örnekte $ html_str) temizlemek gerekir:
$tidy_config = array(
"indent" => true,
"output-xml" => true,
"output-xhtml" => false,
"drop-empty-paras" => false,
"hide-comments" => true,
"numeric-entities" => true,
"doctype" => "omit",
"char-encoding" => "utf8",
"repeated-attributes" => "keep-last"
);
$xml_str = tidy_repair_string($html_str, $tidy_config);
Sonra bir DOMDocument içine XML ($ xml_str) yükleyebilirsiniz:
$doc = DOMDocument::loadXML($xml_str);
Ve nihayet Horia Dragomir yöntemi kullanabilirsiniz:
$list = $doc->getElementsByTagName("h1");
for ($i = 0; $i < $list->length; $i++) {
print($list->item($i)->nodeValue . "<br/>\n");
}
Ya da (bkz. http://www.php.net/manual/en/class.domxpath.php) DOMDocument daha karmaşık sorgular için XPath kullanabilirsiniz
$xpath = new DOMXPath($doc);
$list = $xpath->evaluate("//h1");
Soru "nasıl HTML şeyler ayıklamak" olduğunda, cevap normal ifadeler kullanmak ASLA. Bunun yerine, Robust, Mature HTML Parser for PHP üzerine tartışma bakın.
Ayrıca yerli DOMDocument
a> php sınıf düşünün lütfen.
Sen $domdoc->getElementsByTagName('h1')
senin başlıklarını almak için kullanabilirsiniz.
Bu iş için regex kullanmak ve SimpleHTMLDOM parser şey kullanmak tavsiye edilir
Ben ancak ben topluca başlık etiketlerini kapmak başardı iyi bir şekilde söz etmek istedim, bu bir süper eski bir yazı olduğunu biliyorum.
<h1>title</h1> and <h2>title 2</h2>
Bu yöntem (bir regex olarak çalışır, ancak PHP biraz farklı davranır.)
/<\s*h[1-2](?:.*)>(.*)</\s*h/i
use this in your preg_match
|<\s*h[1-2](?:.*)>(.*)</\s*h|Ui
$group[1]
will include what ever is in between the heading tag.
$group[0]
is everything <h1>test</h
Bu alanlar için hesap olacak ve birisi "class / id" ekler
<h1 class="classname">test</h1>
sınıf / id (grup) göz ardı edilir.
NOTE: Ben HTML etiketlerini analiz edildiğinde, ben her zaman dışarı şerit ve 1 boşluk ile tüm beyaz boşluk, satır araları vb sekmeleri değiştirin.. Bu çok-hatları, dotalls ... Ve boşluk çok büyük miktarlarda en aza indirir, bazı durumlarda can regex biçimlendirme ile karışıklık.
İşte test sayfasında bir link regex test