Aşağıdaki kod parçası:
<?php
$text = <<<EOT
blah blah <0>
<RequestDetails><1><2><3>test</RequestDetails>
<RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
blah blah <7>
EOT;
print $text;
preg_match_all('/<RequestDetails>(.*?)<\/RequestDetails>/s', $text, $matches);
print_r($matches);
?>
Bu çıktıyı üretir:
blah blah <0>
<RequestDetails><1><2><3>test</RequestDetails>
<RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
blah blah <7>
Array
(
[0] => Array
(
[0] => <RequestDetails><1><2><3>test</RequestDetails>
[1] => <RequestDetails><4><5><6>blah
more blah blah
</RequestDetails>
)
[1] => Array
(
[0] => <1><2><3>test
[1] => <4><5><6>blah
more blah blah
)
)
I preg_match_all
yerine /g
bayrağı kullanılan ve aynı zamanda birden çok sonuç almak istediklerini gerçekten (.*?)
isteksiz eşleştirme, kullandım.
Aşağıdaki metinde, bir fark yapar neden görmek, orada iki A.*?Z
maçlar, ama sadece bir A.*Z
.
---A--Z---A--Z----
^^^^^^^^^^^
A.*Z
Bu regex kullanarak XML Ayrıştırma tedbirsiz olduğunu söyledi. Uygun bir XML ayrıştırıcı kullanın; hayatınızı çok daha kolay yapacağız.