Regex 在java中替换为正则表达式';t从左到右更换
我正在尝试做一个降价解析器。基本上,现在我只想把“这是一个斜体文本”转换成“这是一个斜体文本” 我基本上有以下几点: html\u text=html\u text.replaceAll(“\*(.+)\*”,“$1”) 问题出在这里。如果我在字符串中使用replaceAll,比如“this*is*a*test*ok”。它不会替换它2次,只替换一次。无论如何,可以使用replaceFirst()多次修复它,所以这没什么大不了的,但我仍然不明白为什么它是replaceAll()并且它不替换所有 无论如何,使用replaceFirst()我得到一个替换,结果如下:“这是*a*测试ok。”我对正则表达式不太了解,但我希望它从左到右替换,而不是使用任意规则。也就是说,它应该找到的第一个块是“*is*”而不是“*is*a*test*”,结果是“This is a*test*ok.”。无论如何,在另一次执行时,输出是:“这是一个测试ok”,这是错误的。一个从左到右的答案是:“这是一个测试ok。” 因为我对regex不太了解,而且我已经找了一段时间了,所以我决定问问你们 TL.DR.:我希望replaceFirst()使用从左到右的顺序进行替换,而不是任意的顺序 编辑:解决方案不允许在搜索中使用*符号。replaceAll()工作正常。仍然允许从左到右搜索将更容易解决问题,因此有可能吗?尝试以下方法:Regex 在java中替换为正则表达式';t从左到右更换,regex,markdown,replaceall,Regex,Markdown,Replaceall,我正在尝试做一个降价解析器。基本上,现在我只想把“这是一个斜体文本”转换成“这是一个斜体文本” 我基本上有以下几点: html\u text=html\u text.replaceAll(“\*(.+)\*”,“$1”) 问题出在这里。如果我在字符串中使用replaceAll,比如“this*is*a*test*ok”。它不会替换它2次,只替换一次。无论如何,可以使用replaceFirst()多次修复它,所以这没什么大不了的,但我仍然不明白为什么它是replaceAll()并且它不替换所有 无
\*([^*]+)\*
(除星号外,任何符号中取一个或多个)
或者这个:
\*(.+?)\*
(非贪婪版本的+,因此它需要最小的匹配到星号)
您的(.+)
是贪婪的,因此它会转到最后一个星号并捕获比您想要的更多的内容。在我看来,非贪婪的正则表达式是更优雅的一种,但任何一种都有效