我正在尝试做一个降价解析器。基本上,现在我只想将类似:“这是一个 *italic* 文本”转换为“这是一个 <em>italic</em> 文本”。
我基本上有这个:
html_text = html_text.replaceAll("\*(.+)\*", "<em>$1</em>");
这就是问题所在。如果我使用replaceAll,在诸如“this *is* a *test* ok”之类的字符串中。它不会替换它 2 次,只有一次。无论如何,可以多次使用 replaceFirst() 修复它,所以这没什么大不了的,但我仍然不明白为什么它是 replaceAll() 并且它不能全部替换......
无论如何,使用 replaceFirst() 我得到了一个替换,结果如下:“this <em>is* a *test</em> ok。” 我对正则表达式了解不多,但我希望它从左到右替换,而不是使用一些任意规则。也就是说,它应该找到的第一个块是“*is*”而不是“*is* a *test*”,结果是“this <em>is</em> a *test* ok.”。无论如何,再做一次,输出是:“this <em>is<em> a </em>test</em> ok。” 这是错误的。从左到右会给出正确的结果:“this <em>is</em> a <em>test</em> ok。”
由于我对正则表达式了解不多,而且我一直在寻找一段时间,所以我决定问问你们。
TL.DR.:我希望 replaceFirst() 使用从左到右的顺序进行替换,而不是任意顺序。
编辑:解决方案不允许在搜索中使用 * 符号。replaceAll() 工作正常。仍然允许从左到右搜索会更容易解决问题,那么有可能吗?