2016-04-17 20 views
0

特定のXML要素を返すために正規表現フィルタを使用しようとしています。xml要素と一致する要素を返す正規表現

XMLは次のようになりん:今私のような全体の要素をつかむしたいdefault="1"

<outfits> 
    <outfit name="babe0" color="0xF2C291" mood="1" species="babe"> 
     <head url="http://assets.zwinky.com/assets/babe/heads/01/head1" c="0xF4C4A4" c2="0xffffff" z="33000"/> 
     <face url="http://assets.zwinky.com/assets/babe/faces/01/grl1" c="0x8442" c2="0xFE89B9" displayName="girl1" z="34000" id="20014794"/> 
     <midsection url="http://assets.zwinky.com/assets/babe/midsections/01/ms1" c="0xBCE4FE" z="9000"/> 
     <leg url="http://assets.zwinky.com/assets/babe/legs/01/legs1" z="10000"/> 
     <hair url="http://assets.zwinky.com/assets/babe/hair/01/hr3" c="0xA55200" displayName="straight n' long" z="37000" id="20014869"/> 
    </outfit> 
    <outfit thumbnailUrl="users/908/721/swagg_ma_blue/thumbnail-12631.jpg" default="1" name="babe1" color="0xF2C291" mood="1" species="babe"> 
     <head url="http://assets.zwinky.com/assets/babe/heads/01/head1" c="0xF4C4A4" c2="0xffffff" z="33000"/> 
     <face url="http://assets.zwinky.com/assets/babe/faces/01/grl1" c="0x0000CC" c2="0xFE89B9" displayName="girl1" z="34000" id="20014794"/> 
     <midsection url="http://assets.zwinky.com/assets/babe/midsections/01/ms1" c="0xBCE4FE" z="9000"/> 
     <leg url="http://assets.zwinky.com/assets/babe/legs/01/legs1" z="10000"/> 
     <hair url="http://assets.zwinky.com/assets/babe/hair/01/hr3" c="0xCA9460" displayName="straight n' long" z="37000" id="20014869"/> 
     <shirt url="http://assets.zwinky.com/assets/babe/tops/01/top9" c="0xFFCC66" displayName="tube top2" z="21000" id="20014829"/> 
     <bottom url="http://assets.zwinky.com/assets/babe/bottoms/01/bm27" c="0x333333" displayName="pants w/chains" z="20000" id="20014937"/> 
     <shoes url="http://assets.zwinky.com/assets/babe/shoes/01/sh26" c="0x009933" displayName="elf boots" z="19000" id="20014976"/> 
     <hat url="http://assets.zwinky.com/assets/babe/hats/01/hat1" c="0xCC9966" c2="0x999999" displayName="pageboy cap" z="40000" id="20015058"/> 
     <bag url="http://assets.zwinky.com/assets/babe/bags/01/bag15" c="0xFF6600" c2="0x333333" displayName="trick or treat2" z="43000" id="20015070"/> 
     <belt url="http://assets.zwinky.com/assets/babe/belts/01/blt16" c="0x333333" displayName="chain belt3" z="26000" id="20015085"/> 
    </outfit> 
</outfits> 

あなたがそれらの2つのoutfitと呼ばれるノードと1がある見ることができるように、以下のパラメータが含まれています。

<outfit thumbnailUrl="users/908/721/swagg_ma_blue/thumbnail-12631.jpg" default="1" name="babe1" color="0xF2C291" mood="1" species="babe"> 
     <head url="http://assets.zwinky.com/assets/babe/heads/01/head1" c="0xF4C4A4" c2="0xffffff" z="33000"/> 
     <face url="http://assets.zwinky.com/assets/babe/faces/01/grl1" c="0x0000CC" c2="0xFE89B9" displayName="girl1" z="34000" id="20014794"/> 
     <midsection url="http://assets.zwinky.com/assets/babe/midsections/01/ms1" c="0xBCE4FE" z="9000"/> 
     <leg url="http://assets.zwinky.com/assets/babe/legs/01/legs1" z="10000"/> 
     <hair url="http://assets.zwinky.com/assets/babe/hair/01/hr3" c="0xCA9460" displayName="straight n' long" z="37000" id="20014869"/> 
     <shirt url="http://assets.zwinky.com/assets/babe/tops/01/top9" c="0xFFCC66" displayName="tube top2" z="21000" id="20014829"/> 
     <bottom url="http://assets.zwinky.com/assets/babe/bottoms/01/bm27" c="0x333333" displayName="pants w/chains" z="20000" id="20014937"/> 
     <shoes url="http://assets.zwinky.com/assets/babe/shoes/01/sh26" c="0x009933" displayName="elf boots" z="19000" id="20014976"/> 
     <hat url="http://assets.zwinky.com/assets/babe/hats/01/hat1" c="0xCC9966" c2="0x999999" displayName="pageboy cap" z="40000" id="20015058"/> 
     <bag url="http://assets.zwinky.com/assets/babe/bags/01/bag15" c="0xFF6600" c2="0x333333" displayName="trick or treat2" z="43000" id="20015070"/> 
     <belt url="http://assets.zwinky.com/assets/babe/belts/01/blt16" c="0x333333" displayName="chain belt3" z="26000" id="20015085"/> 
    </outfit> 

です。悲しいことに私のregexはうまく動作しません。 PHP function

/\<outfit.+?default="1".+?\>.+?\<\/outfit\>/i 

パート:私が作ったregexは、次のようになります

if (preg_match('/\<outfit.+?default="1".+?\>.+?\<\/outfit\>/i', $user_outfit, $match)) { 
    return $match['0']; 
} 

誰もが私の正規表現と間違って何考えを持っていますか?

+2

's'修飾子を使用しない限り、' .'は改行にマッチしません。パーサを使うべきですが、これははるかに簡単できれいになります。 http://stackoverflow.com/questions/3577641/how-do-you-parse-and-process-html-xml-in-phpを参照してください。 (無関係ですが、 '<' and '>'は正規表現では特殊文字ではなく、エスケープする必要はありません) – chris85

答えて

1

良いパーサ道を取る:

<?php 
$xml = simplexml_load_string($html); 
$elements = $xml->xpath("//outfit[@default=1]"); 
// to get the bag url 
echo $elements[0]->bag["url"]; 
?> 

この方法は、あなたのXMLより良いを分析することができます。

0

.s修飾語を使用する場合を除き、改行は含まれません。だから、正規表現は、このようになります。

/\<outfit.+?default="1".+?\>.+?\<\/outfit\>/is 
関連する問題