Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于递归“wiki样式”列表的正则表达式_Php_Regex_Pcre_Recursion - Fatal编程技术网

Php 用于递归“wiki样式”列表的正则表达式

Php 用于递归“wiki样式”列表的正则表达式,php,regex,pcre,recursion,Php,Regex,Pcre,Recursion,我正在尝试创建一个正则表达式来匹配wiki样式列表,如使用preg_replace_回调: 星号表示无序列表,而数字符号表示有序列表。我试图得到这个,这样它可以匹配无限深,这样*就可以混合 我尝试了以下表达式及其变体:/\s[\*]{1,}[\s]+\s/si 但它似乎不想起作用 我做错了什么?还是有更好的方法来实现这一点?试试这样的方法: \s*([*#]+)\s+.* 不确定我是否完全理解您要找的内容,但[*]{1,}[\S]+是否有效?我认为这将给你一个匹配的*和*组1和列表项目2.1组

我正在尝试创建一个正则表达式来匹配wiki样式列表,如使用preg_replace_回调:

星号表示无序列表,而数字符号表示有序列表。我试图得到这个,这样它可以匹配无限深,这样*就可以混合

我尝试了以下表达式及其变体:/\s[\*]{1,}[\s]+\s/si 但它似乎不想起作用


我做错了什么?还是有更好的方法来实现这一点?

试试这样的方法:

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

不确定我是否完全理解您要找的内容,但[*]{1,}[\S]+是否有效?我认为这将给你一个匹配的*和*组1和列表项目2.1组2,如果这是你正在寻找的。我知道这基本上就是您所拥有的,但我在测试它时没有任何问题。

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

您应该检查以下内容:


这对我也很管用。我认为有必要在模式前面加上\s,以使该模式与G**gle的实例不匹配。话虽如此,这对我来说也很有效。这就是我正在做的。我使用正则表达式匹配*foo或foo或**foo,然后通过回调函数传递结果,该函数将构建列表标记。我只是想知道是否有一种更优雅的方法可以做到这一点。我确实尝试过,结果是它匹配到了我列表中的某个点,然后在另一个回调替换中匹配了它的其余部分。基本上,它所做的就是把我的名单一分为二。
\s*([*#]+)\s+.*