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

重写一个正则表达式没有灾难性回溯?

白禄
2023-03-14

我想知道是否有人可以检查这个正则表达式并重写它,而不会出现灾难性的回溯?我的父亲似乎很不高兴

String NEGATIVE = "(.*?[^0-9]+?)-([0-9.]+?.*?)";

根据Java代码,它正试图使用此表达式来帮助查找并用波浪字符替换负数符号。

// Replace any negative number signs as they will
// be confused with the subtraction operator.
expression = expression.replaceAll(NEGATIVE, "$1~$2").replaceFirst("^-", "~");

谢谢。

共有1个答案

谭光辉
2023-03-14

这将匹配基本表达式中数字之前的所有负号。执行,然后用~替换整个匹配项。

您没有发布输入集,因此可能还有其他情况需要编码。

(?<=[-+*\/0-9 ]|^)-(?=[\d]+)

以下是一些替换的例子https://regex101.com/r/3H30tU/1https://regex101.com/r/3H30tU/1

 类似资料:
  • 有些正则表达式看上去很简单,但是执行起来耗时非常非常非常长,甚至会导致 JavaScript 引擎「挂起」。 开发者们很容易一不小心就写出这类正则表达式,所以我们迟早会面对这种意外问题。 典型的症状就是 —— 一个正则表达式有时能正常工作,但对于某些特定的字符串就会消耗 100% 的 CPU 算力,出现“挂起”现象。 在这种情况下,Web 浏览器会建议杀死脚本并重新载入页面。这显然不是我们愿意看到

  • 我有3个正则表达式,但当模式匹配时执行相同的操作,所以我考虑将所有三个表达式合并为一个。我尝试了很多,但无法让“|”I.e”或“在我的正则表达式中工作 regex1:<代码>文本。替换(/([\u00A9-\u3299])/g,函数myFunction(x){…} regex2: regex3: 我试过这样做,但它不起作用regex:

  • 问题内容: 我想将所有表达式与一个空格完全匹配。目前,我正在使用。但是,这似乎不是一个很好的方法。 问题答案: 为什么不?很好,有点复杂:

  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • 问题内容: 我有一个要提取其子集的字符串。这是较大的Python脚本的一部分。 这是字符串: 我要拉出“ Moltbé,gràcies。mohl behh,GRAH-syuhs ”。为此,我使用正则表达式: 既然不起作用,我也不想提取(即和)。但我不明白为什么会收到此错误?正则表达式可在TextWrangler中使用,为什么不能在Python中使用呢?我是Python的初学者。 问题答案: 这样工

  • 本文向大家介绍Ruby定义一个正则表达式,包括了Ruby定义一个正则表达式的使用技巧和注意事项,需要的朋友参考一下 示例 可以在Ruby中以三种不同的方式创建Regexp。 使用斜杠: / / 使用 %r{} 使用 Regex.new