Php 用于递归“wiki样式”列表的正则表达式
我正在尝试创建一个正则表达式来匹配wiki样式列表,如使用preg_replace_回调: 星号表示无序列表,而数字符号表示有序列表。我试图得到这个,这样它可以匹配无限深,这样*就可以混合 我尝试了以下表达式及其变体:/\s[\*]{1,}[\s]+\s/si 但它似乎不想起作用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组
我做错了什么?还是有更好的方法来实现这一点?试试这样的方法:
\s*([*#]+)\s+.*
不确定我是否完全理解您要找的内容,但[*]{1,}[\S]+是否有效?我认为这将给你一个匹配的*和*组1和列表项目2.1组2,如果这是你正在寻找的。我知道这基本上就是您所拥有的,但我在测试它时没有任何问题。正则表达式通常不是递归的。您需要设置一种更传统的解析方法,可能是使用正则表达式控制转换的嵌套状态机。您应该检查以下内容:
这对我也很管用。我认为有必要在模式前面加上\s,以使该模式与G**gle的实例不匹配。话虽如此,这对我来说也很有效。这就是我正在做的。我使用正则表达式匹配*foo或foo或**foo,然后通过回调函数传递结果,该函数将构建列表标记。我只是想知道是否有一种更优雅的方法可以做到这一点。我确实尝试过,结果是它匹配到了我列表中的某个点,然后在另一个回调替换中匹配了它的其余部分。基本上,它所做的就是把我的名单一分为二。
\s*([*#]+)\s+.*