2014-02-19 78 views
-2

我不知道,如何使主題(標題)足夠清晰明白。 我有這樣的事情:PHP(正則表達式)特殊的未知單詞。字符「對匹配」

<h2>Title</h2> 
<<navigation id="submenu">> 
    <<main level="1" asd="2">> 
    <<main level="1" asd="2">> 
    <<notmain>>asd<</notmain>> 
<</navigation>> 
<p><a href="..">asd</a>asdasdasd</p> 
Oh no! The great rabbit is attacking us, and we are 
only knights of a square table! 
<h2>Here another tag can occur</h2> 
<<footer>> 
    <<copyright id="copy">> 
<</footer>> 

我必須找到並記住(文本)有兩個標籤沒有一個(但只有主父)對象。所以,在這個例子中,我需要的輸出是這樣的:

array(
    0 => '<<navigation id="submenu">><<main level="1" asd="2">><<main level="1" asd="2">><<notmain>>asd<</notmain>><</navigation>>', 
    1 => '<<footer>><<copyright id="copy">><</footer>>'; 

空間和空格和製表符,休息也沒關係,因爲它很容易通過修剪和str_replace函數剝離它。唯一的問題是搜索方法。

我試圖正則表達式,但有幾個問題。

  1. 我只對父母有興趣。所以沒有遞歸搜索裏面,只是在'< <''''和所有內部元素(不關注它們的外觀)的元素外。
  2. 我還沒有任何關於第一個單詞的外觀的數據。它可以是<>。然後返回所有:)。我不知道,如果正則表達式可以記住它找到的東西,我還沒有找到任何解決方案。

我希望我的問題很清楚。 Thx的答覆!

PS。我爲此使用了PHP,並且我知道PHP(很好),所以沒有代碼或想法的文本解決方案也會有所幫助。

PS2。如果沒有正則表達式的解決方案,它會很好。當然還有的暴力破解的解決方案,(字符地分析之後),但它需要大量代碼...

+0

您可以在正則表達式中使用反向引用。 –

+1

是像這樣的情況可能(嵌套的標記,也是主標籤):'XXXX <><><> XXXX <><><> xxxx'? –

+0

不要這麼認爲......但更好的考慮它:)。 +1。所有的答覆和答案。我真的有一個接受的問題。因爲他們都帶來了新的和有益的東西。 –

回答

1

這個怎麼樣:與preg_match_all

使用時

%^<<([^<]+?)>>$(.+?)^<<([^<]+?)>>%sm

給出了這樣的結果

array (
    0 => 
    array (
    0 => '<<navigation id="submenu">> 
    <<main level="1" asd="2">> 
    <<main level="1" asd="2">> 
    <<notmain>>asd<</notmain>> 
<</navigation>>', 
    1 => '<<footer>> 
    <<copyright id="copy">> 
<</footer>>', 
), 
    1 => 
    array (
    0 => 'navigation id="submenu"', 
    1 => 'footer', 
), 
    2 => 
    array (
    0 => ' 
    <<main level="1" asd="2">> 
    <<main level="1" asd="2">> 
    <<notmain>>asd<</notmain>> 
', 
    1 => ' 
    <<copyright id="copy">> 
', 
), 
    3 => 
    array (
    0 => '/navigation', 
    1 => '/footer', 
), 
) 
+0

這聽起來真的很好:)我正在等待其他評論int他上面,可能我會接受它;)。thx爲主意,直到接受時間,+1從我 –

+0

高興地幫助:) – edmondscommerce

+0

:)螞蟻這是未來最好的解決方案,因爲這個數組的其他元素也指向一些明智的: )。太好了!Thx很多! –

相關問題