正则表达式匹配一个或两个数字

本文关键字:两个 数字 一个 正则表达式 | 更新日期: 2023-09-27 18:03:47

如果

(°[0-5])

匹配°4

和this

((°[0-5][0-9]))

匹配°44

为什么这个

((°[0-5])|(°[0-5][0-9]))

匹配°4但不匹配°44?

正则表达式匹配一个或两个数字

因为当您在regex中使用逻辑OR时,regex引擎在找到与regex的第一部分(这里是°[0-5])匹配时返回第一个匹配,并且在这种情况下,由于°[0-5]匹配°4°44中,它返回°4并且不继续匹配其他情况(这里是°[0-5][0-9]):

((°[0-5])|(°[0-5][0-9]))

A|B,其中A和B可以是任意正则,创建一个将匹配A或B的正则表达式。任意数量的正则可以用'|'以这种方式分隔。这也可以在组内部使用(见下文)。在扫描目标字符串时,从左到右尝试用'|'分隔的REs。当一个模式完全匹配时,该分支被接受。这意味着一旦A匹配,B将不会进一步测试,即使它会产生更长的总体匹配。换句话说,'|'运算符永远不会贪心。要匹配文字'|',请使用'|,或将其括在字符类中,如[|]。

您在正则表达式交替中首先使用较短的匹配。最好使用这个正则表达式来匹配两个字符串:

°[0-5][0-9]?

RegEx演示

因为替换操作符|按照指定的顺序尝试替代并选择第一个成功匹配。除非正则表达式后面的某些内容导致回溯,否则永远不会尝试其他替代方法。例如,正则表达式

(a|ab|abc)

abcdefghi

只匹配a。但是,如果将正则表达式更改为

(a|ab|abc)d

它将匹配a。然后,由于下一个字符不是d,它回溯并尝试下一个替代,匹配ab。由于下一个字符仍然不是d,它再次回溯并匹配abc…由于下一个字符是d,所以匹配成功。

为什么不减少

中的正则表达式?
((°[0-5])|(°[0-5][0-9]))

?

°[0-5][0-9]?