在底部更新
也许有人可以帮忙解决这个问题......几天来一直在努力,我被封锁了:/
对于我正在使用的内容清理器解决方案,我正在尝试转换一些纯文本编号列表,例如:
1 Foo
1.1 Foo 1
1.2 Foo 2
2 Bar
2.1 Bar 1
2.2 Bar 2
2.2.1 Bar 2.1
2.2.2 Bar 2.2
2.3 Bar 3
3 Z Another root item
...进入正确的嵌套html列表...
<ul>
<li>Foo
<ul>
<li>Foo 1</li>
<li>Foo 2</li>
</ul>
</li>
<li>Bar
<ul>
<li>Bar 1</li>
<li>Bar 2
<ul>
<li>Bar 2.1</li>
<li>Bar 2.2</li>
</ul>
</li>
<li>Bar 3</li>
</ul>
<li>Another root item</li>
</ul>
可能有所帮助的一些事情:
UPDATE TLTR(不是作业,但是现实世界的用法)
很抱歉看到“功课没做”,我的错。英语不是我的语言,我试着简明扼要。 我要做的是让我的同事更容易格式化文本,从正确的来源纠正HTML。
我设法完成了一天(你可以在这里查看完整的屏幕截图http://twitpic.com/907aw5/,因为我无法附加图像,这是我的第一个问题,没有声誉):
刚刚完成,正如您在上面的截图中看到的那样,我有很多1.2.3“组织”的文本,能够从中获取嵌套列表解决方案将会有很大帮助一种文字。
更新(特定需求)
现在解释“为什么”我用了很多子弹作为假设:
再次抱歉没有明确表示,只是我在Stackoverflow中的第一个问题,我没有意识到它看起来像家庭作业,我的错。
答案 0 :(得分:3)
仅仅为了测试,我继续使用PHP编写了一个解决问题的方法:
function helper_func($m)
{
static $r=0;
$o='';
$l=preg_match_all("#\d+#",$m[1],$n);
while($l < $r)
{
$r--;
$o .= '</li></ul>';
}
if($l == $r)return $l == 0?$o.$m[0]:$o.'</li><li>'.$m[0];
else $o=$m[0];
while($l > $r)
{
$r++;
$o = '<ul><li>'.$o;
}
return $o;
}
echo preg_replace_callback("#^([0-9.]*).*$#m","helper_func",$input);
然而,为了尊重这个作业,我提出了一个故意的错误:因为它正确地出来,你需要在传入之前对$ input做一个小的改动......玩得开心:)