-5

我有一个字符串:

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

实际上,我不知道如何实现这一目标。

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

4

1 回答 1

4

您可以遍历字符串并将 的位置{放在堆栈上,从该堆栈中匹配}pop 。

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

abc{def}ghij{kl{mn}o{pq}}r{s{t{u{v}}w}}xyz
  1. 定义
  2. pq
  3. kl{mn}o{pq}
  4. v
  5. 紫外线}
  6. t{u{v}}w
  7. s{t{u{v}}w}

这将是一个带有循环的解决方案。

于 2013-01-26T00:00:41.027 回答