Ben "46,4400 INR" değerini almak için aşağıdaki dizeyi ayrıştırmak istiyorum
<div id=currency_converter_result>1 USD = <span class=bld>46.4400 INR</span>
<input type=submit value="Convert">
</div>
Bunun için kullanmak ne düzenli ifade gerekiyor?
Ben insanların bu kutsal savaşı "html ayrıştırmak için regex kullanamazsınız" çok ileri gidiyorsun düşünüyorum. parsing (X|HT)ML ve birkaç HTML etiketlerini içermesi için olur basit bir dize ayrıştırma arasında bir fark yoktur.
Söz özelliklerine göre yapmalıdır:
preg_match('#<span class=bld>(.*?)</span>#', $string, $match);
$value = $match[1];
Neden normal ifadeler kullanmak istiyorsunuz? Ben simlpleXml içine x / html belgeyi okumak ve xpath istenen değerini almak için kullanmak gerektiğini düşünüyorum. Tabii ki can normal ifadeler kullanmak, ancak bir xpath çözüm imo, güzel olurdu.
$xml = simplexml_load_file("/path/to/document.html");
$node = $xml->xpath("/path/in/doc/to/span[class=bld]");
...
DOM + XPath> Regex:
<?php
$str = '
<div id=currency_converter_result>1 USD = <span class=bld>46.4400 INR</span>
<input type=submit value="Convert">
</div>';
$d = new DOMDocument();
$d->loadHTML( $str );
$x = new DOMXpath($d);
$xpr = $x->evaluate('//span[contains(@class, "bld")]');
if ( count( $xpr ) ) {
foreach ( $xpr as $el ) {
echo $el->nodeValue;
}
}
?>
Tabii simplexml ya da daha az kod içeren diğer benzer kütüphaneleri kullanmak için çekinmeyin.
Seçilen cevap kırma örneği, HTML olarak değişmiş ise Milan önerdi:
<?php
$subject = '
<div>
<div id=currency_converter_result/><b/>1 USD = <span class=bld one>46.4400 INR</span>
<input type=submit value="Convert">
</div></div><span/>';
$pattern = '/<div id=currency_converter_result>.*?<span.*?>(.*?)<\/span>/';
preg_match($pattern, $subject, $matches);
print_r($matches); // output is Array ( )
Diğer regex cevap kırılma:
<?php
$subject = '
<div>
<div id=currency_converter_result/><b/>1 USD = <span class=bld one>46.4400 INR</span>
<input type=submit value="Convert">
</div></div><span/>';
preg_match('#<span class=bld>(.*?)</span>#', $subject, $match);
$value = $match[1];
var_dump($value); // outputs NULL
Benim DOM / XPath çözüm değişmiş biçimlendirme ile mükemmel çalışır:
<?php
$subject = '
<div>
<div id=currency_converter_result/><b/>1 USD = <span class=bld one>46.4400 INR</span>
<input type=submit value="Convert">
</div></div><span/>';
$d = new DOMDocument();
$d->loadHTML( $subject );
$x = new DOMXpath($d);
$xpr = $x->evaluate('//span[contains(@class, "bld")]');
if ( count( $xpr ) ) {
foreach ( $xpr as $el ) {
echo $el->nodeValue; // output 46.4400 INR
}
}
?>