2014-02-19 54 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很多! –

相关问题