正则表达式匹配一个或两个数字
本文关键字:两个 数字 一个 正则表达式 | 更新日期: 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]?