PHP:递归字符串子集提取的算法

时间:2013-01-25 23:48:42

标签: php regex

我有一个字符串:

abc{def}ghij{kl{mn}o{pq}}r{s{t{u{v}}w}}xyz

目标是提取括号内的所有内容:

1. def
2. kl{mn}o{pq}
3. mn
4. pq
5. s{t{u{v}}w}
6. t{u{v}}w
7. u{v}
8. v

寻找任何解决方案,正则表达式或循环。

编辑:

好的,既然这开始变得脾气暴躁了,这就是我尝试过的事情:

preg_match("/(\{[^\{]+\})+/", $str, $matches); // matches only first occurrence
preg_match_all("/(\{[^\{\}]+\})+/", $str, $matches); // this matches only the final level occurrences

实际上是出于如何实现这一点的想法。

所以现在,我最棘手的障碍是找到第一级的所有事件。这样我就可以递归地挖掘字符串并检索我需要的所有子集。

1 个答案:

答案 0 :(得分:4)

你可以通过字符串并将{的位置放到堆栈上,从该堆栈中弹出} pop。

然后您将获得列表,但顺序不同:

abc{def}ghij{kl{mn}o{pq}}r{s{t{u{v}}w}}xyz
  1. DEF
  2. MN
  3. PQ
  4. KL {} MNø{PQ}
  5. v
  6. ∪{V}
  7. 吨{∪{V}} W
  8. 取值{吨【U {V}}}瓦特
  9. 这将是一个带循环的解决方案。