Php Ul标签。如何使用正则表达式标识列表的开始和结束
我在数据库中有很多不同的博客文章。他们正在降价。我想把它们转换成html。我的ul标签有问题 例如,以一种简化的方式,我有:Php Ul标签。如何使用正则表达式标识列表的开始和结束,php,regex,markdown,Php,Regex,Markdown,我在数据库中有很多不同的博客文章。他们正在降价。我想把它们转换成html。我的ul标签有问题 例如,以一种简化的方式,我有: Something - First - Second Something else Second ul - First - Second Some final text 我可以把li标签贴上: $text = preg_replace("/^- (.*)/m", "<li>$1</li>", $text); $text=preg_replac
Something
- First
- Second
Something else
Second ul
- First
- Second
Some final text
我可以把li标签贴上:
$text = preg_replace("/^- (.*)/m", "<li>$1</li>", $text);
$text=preg_replace(“/^-(.*)/m”,“$1 ”,$text);
但是,我如何识别列表的开头或结尾以放置ul标签
我想要这个结果:
Something
<ul>
<li>- First</li>
<li>- Second</li>
</ul>
Something else
Second ul
<ul>
<li>- First</li>
<li>- Second</li>
</ul>
Some final text
什么
- -首先
- -第二
- -首先
- -第二
您需要在两次过程中完成此操作,因此使用两次
preg\u replace
调用:
$text = preg_replace("/^- (.*)/m", "<li>$1</li>",
preg_replace("/^- .*(\R- .*)*/m", "<ul>\n$0\n</ul>", $text)
);
$text=preg_replace(“/^-(.*)/m)”,“$1 ”,
preg_replace(“/^-.*(\R-.*)/m”,“\n$0\n
”,$text)
);
内部代码首先执行,查找以-
开头的行,并捕获以下也以-
开头的所有行,直到后面的行不以-
开头
*
匹配当前行末尾的任何内容。新行字符与
不匹配。因此,next用于匹配任何被认为是换行符序列的内容。然后再次进行连字符检查,并捕获行的其余部分。这可以尽可能多地重复((…)*
)
然后将匹配的块包装在ul
标记中。在此阶段不会删除连字符
外层将在
li
标签中以-
开头的行包裹起来,取出-
请解释一下您的内层。什么是\R?我添加了更多详细信息。我一直在搜索,但找不到任何关于\R这是否像一个包含\n和\R的泛型?我的答案中有一个超链接;-)另请参见。在这里,使用正则表达式可能不是理想的方法。