我不知道,如何让主题(标题)清晰明白。 我有这样的事情:
<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>>';
空格和空格,制表符和休息无关紧要,因为使用trim和str_replace很容易将其剥离。唯一的问题是搜索方法。
我试图正则表示这一点,但问题很少。
我希望我的问题很明确。
我知道PHP(相当不错)所以没有代码或想法的文本解决方案也会有所帮助。
如果存在没有正则表达式的解决方案,它会很棒。当然有一个暴力解决方案,(字符分析后的字符),但它需要大量的代码......
答案 0 :(得分:1)
这个怎么样:
%^<<([^<]+?)>>$(.+?)^<<([^<]+?)>>%sm
与preg_match_all
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',
),
)