PHP(正则表达式)特殊的未知单词。字符“对匹配”

问题描述 投票:-2回答:1

我不知道,如何让主题(标题)清晰明白。我有这样的事情:

<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很容易将其剥离。唯一的问题是搜索方法。

我试图正则表达,但几乎没有问题。

  1. 我只对父母感兴趣。所以内部没有递归搜索,只是在带有'<<''>>'的元素外部以及所有内部元素(不关心它们的外观)。
  2. 我没有关于第一个单词看起来如何的任何数据。它可以是<>。然后返回所有:)。我不知道,并且如果正则表达式能够记住它所发现的内容,则没有找到任何解决方案。

我希望我的问题很明确。

我知道PHP(相当不错)所以没有代码或想法的文本解决方案也会有所帮助。

如果存在没有正则表达式的解决方案,那就太好了。当然有一个暴力解决方案,(字符分析后的字符),但它需要大量的代码......

php regex matching
1个回答
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',
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.