Regex用于递归“wiki风格”列表

时间:2010-05-21 07:16:31

标签: php regex pcre recursion

我正在尝试创建一个正则表达式来匹配“wiki样式”列表,如(使用preg_replace_callback()):

* List Item 1  
* List Item 2  
*# List Item 2.1  
*# List Item 2.2  
* List Item 3 

Asterisks表示无序列表,而Number-Signs表示有序列表。我试图得到这个,所以它可以匹配无限深度,以便*和#可以混合。

我尝试了以下表达式(及其变体):/\s([\*#]{1,}) ([\S ]+)\s/si
但似乎并不想工作。

我做错了什么?或者有更好的方法来实现这个目标吗?

4 个答案:

答案 0 :(得分:0)

尝试这样的事情:

\s*([*#]+)\s+.*

答案 1 :(得分:0)

不确定我是否理解您的要求,但([*#]{1,}) ([\S ]+)是否有效?我认为这将为您提供第1组的**#以及第2组的“列表项2.1”匹配,如果这是您要查找的内容。我知道这基本上就是你所拥有的,但在测试时我没有遇到任何问题。

答案 2 :(得分:0)

正则表达式通常不是递归的。您需要设置更传统的解析方法(可能是使用正则表达式控制转换的嵌套状态机)。

答案 3 :(得分:0)