当前位置: 首页 > 知识库问答 >
问题:

如何使此正则表达式不贪婪

张照
2023-03-14
String input = "<p>...<mfrac><mn>[format(((([[B]])*([[C]]))),\"###,##0.######\")]</mn><mn>[[D]]</mn></mfrac></math></p>";
String result = input.replaceAll("<mfrac>(<mn>\\[[^\\\\]+]</mn>)", "<mfrac><mrow>$1</mrow>");

输出:

<p>...<mfrac><mrow><mn>[format(((([[B]])*([[C]]))),"###,##0.######")]</mn><mn>[[D]]</mn></mrow></mfrac></math></p>

通缉犯:

<p>...<mfrac><mrow><mn>[format(((([[B]])*([[C]]))),"###,##0.######")]</mn></mrow><mn>[[D]]</mn></mfrac></math></p>

共有1个答案

禹昊穹
2023-03-14

就像医生说的,带着问号。显然你没有把问号放在正确的地方。

You have: input.replaceAll("<mfrac>(<mn>\\[[^\\\\]+]</mn>)", "<mfrac><mrow>$1</mrow>");
You need: input.replaceAll("<mfrac>(<mn>\\[[^\\\\]+?]</mn>)", "<mfrac><mrow>$1</mrow>");

注意HTML不是常规的,所以这些都不是好主意。使用JSoup或类似的工具(解析html的东西),修改它给你的树,重新将树呈现回HTML,这是正确的方法。

 类似资料:
  • 问题内容: 我正在使用jQuery。我有一个带有特殊字符块的字符串(开头和结尾)。我想从特殊字符块中获取文本。我使用正则表达式对象进行字符串内查找。但是当有两个或两个以上特殊字符时,如何告诉jQuery查找多个结果? 我的HTML: 和我的JavaScript代码: 我的结果是: [|cơthử|nghiệm|] thtr trng [| test2 |đâylàtestlần2 |]chứngk

  • 问题内容: 我如何制作像这样的python正则表达式,使得在给定的情况下,python匹配而不是? 我知道我可以使用代替,但是我正在寻找一种更通用的解决方案,使我的regex更加整洁。有什么办法告诉python“嘿,尽快匹配它”? 问题答案: 您寻找功能强大的吗? http://docs.python.org/3/howto/regex.html#greedy-versus-non-greedy

  • 问题内容: 我主要关心的是Java风格,但是我也希望了解其他信息。 假设您有一个像这样的子模式: 虽然这不是很有用,但可以说这两个捕获组(例如和)是更大模式的一部分,该模式与对这些组的反向引用匹配,依此类推。 因此,两者都是贪婪的,因为他们试图捕获尽可能多的东西,只在需要时花更少的时间。 我的问题是:谁更贪婪?是否获得优先权,仅在必要时才分配份额? 关于什么: 假设确实获得了优先权。假设它过于贪婪

  • 问题内容: 我有下一个代码: 并具有下一个输出: 但我认为它必须是: 有人请解释为什么。 问题答案: 由于您的模式是非贪婪的,因此它们在仍由匹配项组成的情况下,匹配的文本越少越好。 去除 ?在第二组中,您会得到 单词 word word big small

  • 本文向大家介绍php正则表达式中贪婪与非贪婪介绍,包括了php正则表达式中贪婪与非贪婪介绍的使用技巧和注意事项,需要的朋友参考一下 一、贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一。 我们来看看正

  • 我正在编写一个正则表达式来抓取之间的数据。我遇到的唯一问题是最后一个 正在被捕获。正则表达式 < code>m.group()打印< code > https://cheatsheetseries . owasp . org/Cheat sheets/click jacking _ Defense _ Cheat _ sheet . html " 。如何编写不包含最后一个引号的正则表达式? 回答了