坚持正则表达式

时间:2011-12-08 23:26:25

标签: php regex preg-match-all

我坚持使用php preg_match_all函数。也许有人会用正则表达式帮助我。我们假设我们有一些代码:

[a]a[/a]
[s]a[/s]
[b]1[/b]
[b]2[/b]
...
...
[b]n[/b]
[e]a[/e]
[b]8[/b]
[b]9[/b]
...
...
[b]n[/b]

我需要匹配位于[b][s]标记之间的[e]标记内的所有内容。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

如果你的结构与上面完全相同,我个人会避免使用正则表达式(对于这些语言并不是一个好主意),只需检查每行的第二个字符。一旦您看到s进入消费模式和每一行,直到您看到e找到第一个]并阅读其中的所有内容[

答案 1 :(得分:1)

为简单起见,请使用两个preg_match来电。

首先检索要检查的列表/\[s](.+?)\[e]/s 然后使用该结果字符串并匹配包含的/\[b](.+?)\[\/b]/s内容。

答案 2 :(得分:1)

看起来你正在尝试模式匹配具有树状结构的东西,基本上像HTML或XML。每当你发现自己说“找到X位于匹配Y标签内”时,你就会遇到这个问题。

尝试使用正则表达式进行此类工作是一个坏主意。

以下是从different answer of mine for a similar question

复制/粘贴的一些信息

一些类似SO帖子的引用会让你知道你遇到的困难:

要做的“正确的事”是解析你的输入,保持你的状态。这可以像扫描文本和保留一堆当前标签一样简单。

答案 3 :(得分:0)

单独的正则表达式不足以解析XML,这似乎是一种简化的XML语言。