PHP / regex: HTML etiketi dize değerini almak nasıl?

5 Cevap php

5 Cevap

<?php
function getTextBetweenTags($string, $tagname) {
    $pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    return $matches[1];
}

$str = '<textformat leading="2"><p align="left"><font size="10">get me</font></p></textformat>';
$txt = getTextBetweenTags($str, "font");
echo $txt;
?>

Yani hile yapmak gerekir

Senin desen, sadece iki etiketleri arasında all text maç istiyorum. Böylece, bir [\w\W] tüm karakterleri maç için örneğin kullanabilirsiniz.

function getTextBetweenTags($string, $tagname) {
    $pattern = "/<$tagname>([\w\W]*?)<\/$tagname>/";
    preg_match($pattern, $string, $matches);
    return $matches[1];
}

Öznitelik değerleri bir ova > karakter içerebilir yana, bu düzenli ifadeye deneyin:

$pattern = '/<'.preg_quote($tagname, '/').'(?:[^"'>]*|"[^"]*"|\'[^\']*\')*>(.*?)<\/'.preg_quote($tagname, '/').'>/s';

Ama düzenli ifadeler HTML gibi düzenli olmayan dilleri ayrıştırma için uygun değildir. Daha iyi SimpleXML veya DOMDocument gibi bir ayrıştırıcı kullanmanız gerekir.

Bu deneyin

$str = '<option value="123">abc</option>
        <option value="123">aabbcc</option>';

preg_match_all("#<option.*?>([^<]+)</option>#", $str, $foo);

print_r($foo[1]);

Aşağıdaki php parçacıkları html etiketleri / elemanları arasındaki metni dönecekti.

regex: "(. *) / tagname endtag /" etiketleri arasında metin dönecektir.

yani


$regex="/[start_tag_name](.*)[/end_tag_name]/";
$content="[start_tag_name]SOME TEXT[/end_tag_name]";
preg_replace($regex,$content); 

Bu "BAZI METİN" dönecektir.

Selamlar,

Web-Farmer @letsnurture.com