【发布时间】:2017-08-10 13:45:22
【问题描述】:
我正在尝试用标签包装以“##”开头的每一行。尝试实现类似于 GitHub/Stackoverflow 的文本格式语法。
这是我得到的:
$value = preg_replace('/^## (.*)$/m', '<p>$1</p>', $value);
在谷歌上搜索了一段时间后,这似乎是正确的解决方案,但是它没有按预期工作,或者我只是不明白。
示例文本:
## Some header 1
Some text that doesn't need to be altered
## Some header 2
结果如下:
<p>Some header 1
</p>
Some text that doesn't need to be altered
<p>Some header 2</p>
如您所见,第二个标题被处理得很好,因为它位于文本的末尾。但是,第一个标头在结束标记之前的末尾有一个额外的新行。我该如何摆脱它?
【问题讨论】:
-
github使用的语法是MarkDown。我建议你使用像github.com/erusev/parsedown 这样的现有库来解析你的文本
-
在您的代码中没有发现任何问题,请查看3v4l.org/I8ICB
-
这很有趣。试试
'/(*ANYCRLF)^## (.*)$/m' -
它确实有效,Wiktor,谢谢!你应该让它成为一个答案。我发现它实际上是在该字符串的末尾添加一个“\r”,而不是一个“\n”。如果有什么不同,我正在 Laravel 工作。这个 (*ANYCRLF) 部分是什么意思?
-
我可以看到在线代码运行良好,Chetan,这很奇怪。
标签: php regex preg-replace