【发布时间】:2014-09-21 03:26:57
【问题描述】:
我正在尝试在 java 中制作一个简单的 markdown 解析器,我只需要一个将字符串设为粗体,另一个将颜色更改为蓝色,并且还可以将两个 markdown 结合起来。 因此,对于粗体,单词需要放在双星 * 之间,但是,如果只有 5 颗星或更多且中间没有任何内容,我不希望它匹配(许多网站仍然匹配并将 5 星更改为单个粗体一)因此,如果用户使用星星来绘制分隔线或其他内容,则它们应该按原样显示,但如果存在带有星星或其他符号(例如数学公式 4*5)的内容,则它应该匹配(换句话说,介于两者之间的不应该只是星星)
到目前为止,这是我的代码,它可以匹配粗体、蓝色和两者,但仍然匹配 5+ 星。
str = str.toString().replaceAll("\*\*(.+?)\*\*", "<big>$1</big>");
str = str.toString().replaceAll("\*b(.+?)\*\*", "<font color='blue'>$1</font>");
我尝试将 (.+?) 更改为 (.+?&&[^\*])、(.*?[^\*].*?)、(.+?[^\*].*?) 和许多其他,但它们对某些情况有效,而在其他情况下则失败!
不应匹配的示例:
****
***** (5 and more stars)
*Hi*
***Hi***
**New\nLine**
应该匹配一种或两种情况的示例(粗体和蓝色):
**Hi** : BOLD
*bHi** : Blue
***bHi**** : BOLD and Blue
*b**Hi**** : BOLD and Blue
它也不应该在多行之间匹配。
我想做的事情是不是太复杂了?可以只用正则表达式吗?
- 这是针对 Android 进行的,以防它与普通 java 不同。
【问题讨论】:
标签: java android regex markdown