0
我試圖在某些數據包上運行過濾器。接收我需要的信息。preg_match_all跳過節點部分
我使用PHP preg_match_all
運行我的過濾器,並找到任何匹配。
不幸的是,數據包確實包含不同的節點。
<u i='550820' m='0'>
<n>
<![CDATA[supers0nic-]]>
</n>
<vars>
<var n='state' t='s'>
<![CDATA[0]]>
</var>
<var n='destinationX' t='n'>
<![CDATA[490.75]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[201.5]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
</vars>
</u>
<u i='550946' m='0'>
<n>
<![CDATA[cutie_lexi12]]>
</n>
<vars>
<var n='destinationX' t='n'>
<![CDATA[249.9]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[323.34999999999997]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[12731]]>
</var>
</vars>
</u>
這裏是什麼IM欲接收的例子。重要的是替換NEEDTHIS:
<u i='NEEDTHIS' m='0'>
<n>
<![CDATA[NEEDTHIS]]>
</n>
<vars>
<var n='state' t='s'>
<![CDATA[0]]>
</var>
<var n='destinationX' t='n'>
<![CDATA[NEEDTHIS]]>
</var>
<var n='destinationY' t='n'>
<![CDATA[NEEDTHIS]]>
</var>
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
</vars>
</u>
可悲的是,我必須跳過某些部分,如下面的代碼節點:
<var n='state' t='s'>
<![CDATA[0]]>
</var>
,因爲這不是在每一個節點包含。
我的實際代碼:
\<u i=\'([0-9]+)\' m=\'0\'\>\<n\>\<\!\[CDATA\[([a-z0-9\-\_\s]+)\]\]\>\<\/n\>\<vars\>\<var n=\'state\' t=\'s\'\>\<\!\[CDATA\[0\]\]>\<\/var\>\<var n=\'destinationX\' t=\'n\'\>\<\!\[CDATA\[([0-9\.]+)]\]\>\<\/var\>\<var n=\'destinationY\' t=\'n\'\>\<\!\[CDATA\[([0-9\.]+)]\]\>\<\/var\>\<var n=\'zchievements\' t=\'n\'\>\<\!\[CDATA\[([0-9]+)\]\]\>\<\/var\>\<\/vars\>\<\/u\>
所以我需要跳過的
<var n='state' t='s'>
<![CDATA[0]]>
</var>
和
<var n='zchievements' t='n'>
<![CDATA[684]]>
</var>
部分。
我怎麼會意識到這一點?
爲什麼不只是做對了,並使用XML解析器?這是他們的目標。有一些簡單的內置到PHP中。 –
因爲我們收到大量的數據包,機器人的連接必須保持活力。我們必須搜索這個特定的匹配。它爲機器人制作。 – d4nexaaa
無論您使用正則表達式還是xml解析器,它爲什麼都是「機器人」。如果它仍然是PHP,就機器人而言,不會有任何區別。 –