次の正規表現は、 xmlと一致します。また、は、ASP内部すべてキャプチャします。1.
(?s)<asp:Content ID="[^"]*"\W+ContentPlaceHolderID="[^"]*"\W+runat="[^"]*">(.*?)</asp:Content>
注コンテンツタグをグループにそれを置くこと、特定の正規表現でオンにインライン修飾語「ドットが改行にマッチする」であるモード(S?) .NET、Java、Perl、Python、PHPのpreg関数用PCREなどのフレーバー。
異なる正規表現フレーバーを使用している場合は、(?s)を削除し、「ドットが新しい行に一致します」を別の方法でアクティブにする必要があります。
次のコードは、グループキャプチャを取得します。一般的な解決策を示すために、件名の文字列にはこれらのプレースホルダの2つが含まれています。ここで
<?php
$subject='
<asp:Content ID="blah" ContentPlaceHolderID="blah" runat="blah">Capture Me!</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="header" runat="server">
<div>
<categories>
<category>
<name>item 1</name>
<categories>
<category>
<name>item 1.1.</name>
</category>
<category>
<name>item 1.2.</name>
</category>
</categories>
</category>
</categories>
</div>
</asp:Content>
';
preg_match_all('%(?s)<asp:Content ID="[^"]*"\W+ContentPlaceHolderID="[^"]*"\W+runat="[^"]*">(.*?)</asp:Content>%', $subject, $result,PREG_OFFSET_CAPTURE | PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result); $i++) {
echo "Capture number: ".$i."<br />".htmlentities($result[1][$i][0])."<br /><br />";
// echo "Match number: ".$i."<br />".htmlentities($result[0][$i][0])."<br /><br/>";
}
?>
が出力されます。
Capture number: 0
Capture Me!
Capture number: 1
<div> <categories> <category> <name>item 1</name> <categories> <category> <name>item 1.1.</name> </category> <category> <name>item 1.2.</name> </category> </categories> </category> </categories> </div>
あなたもマッチ全体(だけでなく、キャプチャ)を表示したい場合は、単にためのループに第2のエコー行のコメントを解除します。
これはあなたが探していたものだと思いますか?
正規表現を使用しないでください。動作しません。実際のXMLパーサーを使用します。 –
私はルート要素を与えるすべてのxmlツリーを抽出する必要があります。しかし、xmlはhtmlによってsuroundedされることを覚えておくことが重要です。 –