Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 正则表达式:如何匹配所有大于954的数字?_Regex - Fatal编程技术网

Regex 正则表达式:如何匹配所有大于954的数字?

Regex 正则表达式:如何匹配所有大于954的数字?,regex,Regex,我尝试了^([0-9]\d |\d{4,})$,但没有给出正确的结果。I不会为此使用正则表达式,因为您将陷入一个丑陋的模式链中 但是,如果仍然必须或想要使用正则表达式,可以使用如下正则表达式: [1-9]\d{3,}|9[6-9]\d|9[5-9]{2} 这个正则表达式背后的思想是: [1-9]\d{3,} --> This will match 4 or more digit numbers 9[6-9]\d --> This will match number

我尝试了
^([0-9]\d |\d{4,})$
,但没有给出正确的结果。

I不会为此使用正则表达式,因为您将陷入一个丑陋的模式链中

但是,如果仍然必须或想要使用正则表达式,可以使用如下正则表达式:

[1-9]\d{3,}|9[6-9]\d|9[5-9]{2}

这个正则表达式背后的思想是:

[1-9]\d{3,}   --> This will match 4 or more digit numbers
9[6-9]\d      --> This will match numbers between 960 to 999
9[5-9]{2}     --> This will match numbers between 955 to 999
                  you could write this pattern as `95[5-9]` to cover 
                  numbers from 955 to 959 if you wish (it's up to you)
这是:

([1-9]\d{3,}|9[6-9]\d|95[5-9])
看到了

还有一张漂亮的图表:


您可以使用以下功能:

95[5-9]|9[6-9]\d|[1-9]\d{3,}
说明:

  • 95[5-9]
    955-959
  • 9[6-9]\d
    960-999
  • [1-9]\d{3,}
    匹配
    >1000

有点长,但设计为每个数字只有一个可能的路径(快速故障):

请注意,分支是按概率排序的

浓缩:

^(?:[1-8][0-9]{3,}|9(?:[0-4][0-9]{2,}|[6-9][0-9]+|5(?:[5-9][0-9]*|[0-4][0-9]+)))$
注意:使用正则表达式模式执行此操作在大多数情况下是不合适的,也是复杂的(正则表达式不是为解决算术问题而设计的)。因此,如果可以,请将字符串转换为整数,并通过简单的比较进行测试。

\b(?)

该行将匹配前导零和小数,但仅当整个值大于954时才匹配。因此,它将匹配955.62和0001253.125,但不匹配00954.999或125.967

要分解它:

(?表示如果数字前有句点,则不匹配。这是为了避免匹配0.957之类的内容

e2:
0*
已添加,以与前导零完全匹配

(?:[1-9]\d{3,}9(?[6-9]\d|5[5-9])
设置小数点左侧所有实质性内容的匹配。
[1-9]\d{3}
匹配等于或大于1000的任何数字。
9(?[6-9]\d|5[5-9])
将900s中的任何数字与另一个或嵌套的数字进行匹配。当十位数和一位数为60-99或55-59时,内部或将匹配

(?:\。\d+)
是一个匹配小数的语句。结尾的?使其成为可选语句,以便匹配其中没有小数点的数字

e2:正则表达式被包装在
\b
s中,以确保它是它自己的单词。正则表达式将不再匹配so1337、769或960

EDIT1:忘了把我的.literal


EDIT2:进行了标记为“e2:”

的更改。我试图解析为特定查询捕获的数据库操作时间的应用程序日志文件。时间以毫秒为单位记录(例如,DatabaseTime=12035~ database Time=~12秒)。为了进一步说明,我需要查找应用程序UI在120秒后超时的情况(即DatabaseTime>120000),因此我可以捕获同一行上的时间戳

下面是我为正则表达式模式想到的:

[1-9][2-9][0-9]\d{3,}|[1-9]\d{6,}
在座的许多人都是正则表达式专家,足以在脑海中对其进行分析,但对于那些不是专家的人,我已经在regex101.com上对此进行了测试,这也为您展示了正则表达式的分解:

关于这个问题的一些想法/考虑(同样与原始问题完全相关):

  • 我觉得我对此采取了一种非常简约的方法,然而,它
    似乎已经满足了需要我搜索的用例 使用正则表达式搜索选项在NotePad++中浏览日志

  • 我同意Regex不是模拟这种数值运算的解决方案 (如果不是这样,最好结合使用正则表达式和 一种编程/脚本语言)但我必须告诉你,如果你 需要在文本编辑器中快速搜索日志文件,例如 记事本++,而您没有耐心或客户端权限
    创建一些漂亮的代码或安装Python插件,regex可能是
    你唯一的快速(且公认的贪婪)选择,如果那是
    在本例中,这是一个非常有用的场景 工作场所


最后,请允许我说明:在你做了初步的研究之后,你会有足够的时间来完成编码和效率的工作……为什么你一开始就找不到你要找的代码呢?一个小小的研究不会伤害任何人…而且每个人都知道罗马不是一天建成的。.regex用于在文本中查找模式,而不是计算数值。使用正则表达式查找一个数字,然后用您使用的语言对其进行数字比较。ehh我注意到发生了一些情况:D我将把它放回去,谢谢@dasblinkenlight您必须重新排列模式,因为
99999
不匹配:).Put
[1-9]\d{3,}
开头。看起来我的破坏了图表生成器…它显示了2+次,但应该是3+…9999-“部分”匹配…我也不会为此使用正则表达式。:)谢谢@nevermind,重新安排模式:P,它现在起作用了。我没有使用您提供的正则表达式字符串找到与955.62或0001253.125的匹配项。0001253.125不是完全匹配项。我将更新它,使其也与前导零匹配。不过,我在匹配955.62时没有遇到任何问题。而且,根据regex101 lin,结果也是这样k我之前发布过,我在那里输入的look-behind断言在js或golang中不起作用。它不匹配小数,但假设它唯一的整数是OP之后的整数,我看不出你的代码有任何问题。我一开始就编辑这个问题,因为这是一个有效的答案。@finnrayment谢谢你,我感谢你的反馈。是的,在我的使用中se日志不显示任何小数,但您已经为其他希望这样做的人声明了一个有效的间隔。
[1-9][2-9][0-9]\d{3,}|[1-9]\d{6,}