Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 在java中替换为正则表达式';t从左到右更换_Regex_Markdown_Replaceall - Fatal编程技术网

Regex 在java中替换为正则表达式';t从左到右更换

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()并且它不替换所有 无

我正在尝试做一个降价解析器。基本上,现在我只想把“这是一个斜体文本”转换成“这是一个斜体文本”

我基本上有以下几点:

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()工作正常。仍然允许从左到右搜索将更容易解决问题,因此有可能吗?

尝试以下方法:

\*([^*]+)\*
(除星号外,任何符号中取一个或多个)

或者这个:

\*(.+?)\*
(非贪婪版本的+,因此它需要最小的匹配到星号)

您的
(.+)
是贪婪的,因此它会转到最后一个星号并捕获比您想要的更多的内容。在我看来,非贪婪的正则表达式是更优雅的一种,但任何一种都有效