在我正在构建的项目中,我想按如下方式使用降价
*text* = <em>text</em>
**text** = <strong>text</strong>
***text*** = <strong><em>text</em><strong>
由于这是我需要的仅有的三种 markdown 格式,我想保持轻量级并避免导入整个 PHP markdown 库,因为这会引入我不需要的功能并产生问题。
所以我一直在尝试构建一些简单的正则表达式替换。使用 preg_replace 我运行:
'/(\*\*\*)(.*?)\1/' to '<strong><em>\2</em></strong>'
'/(\*\*)(.*?)\1/' to '<strong>\2</strong>'
'/(\*)(.*?)\1/' to '<em>\2</em>',
这很好用!em,粗体,并且组合都可以正常工作...
但是,如果用户犯了错误或输入了很多星,一切都会中断。
IE
****hello**** = <strong><em><em>hello</em></strong></em>
*****hello***** = <strong><em><strong>hello</em></strong></strong>
******hello****** = <strong><em></em></strong>hello<strong><em></em></strong>
etc
理想情况下它会创建
****hello**** = *<strong><em>hello</em></strong>*
*****hello***** = **<strong><em>hello</em></strong>**
******hello****** = ***<strong><em>hello</em></strong>***
etc
忽略不需要的星号(这样用户就会清楚他们犯了错误,更重要的是,呈现的 HTML 仍然有效)。
我认为必须有某种方法来修改我的正则表达式来做到这一点,但即使经过一整天的尝试,我也无法终生完成它!
我也会对结果感到满意
******hello****** = <strong><em>hello</em></strong>
所以请,有人可以帮助我吗?
也请考虑不均匀的星星。在这种情况下,以下场景将是理想的。
***hello* = **<em>hello</em>
以及星星应该是身体的一部分并且未被检测到的时间,例如,如果用户输入:
'terms and conditions may apply*'
or
'I give the film 5* out of 10'
非常感谢