繁体   English   中英

我的正则表达式匹配整数有什么问题?

[英]What's wrong with my regex to match an integer?

是的,我确定之前已经在StackOverflow上询问过这个问题,但是如果有的话请指点我,因为我找不到它。 有很多正则表达式的问题,有些甚至与我想要的相似。

基本上,我想匹配正数和负数的整数(即整数)。 所以没有任何以小数点后跟更多数字的结尾。 我只关心英文风格的编号,我不想让千分隔等等,而我只想用一个'。' 作为一个小数点,这些奇怪的'逗号都不是某些国家的小数点'。

^[+-]?\d+(?!\.\d)

但以上似乎匹配如下......

10      matches '10'       <- yay
465654  matches '465654'   <- yay
653.56  only matches '65'  <- boo
1234.5  only matches '123' <- also boo!

尝试使用regexper ,在视觉上它看起来就像我想要的那样。 我是新的负向前瞻,所以我显然在这里错过了什么,但它是什么?

另外,我应该说我正在使用它作为我正在编写的解释器的一部分,因此我想在整数之后允许其他内容。 例如

12 + some_variable

或者(更复杂的)......

10.Tostring()  <- should still match the '10'

您的模式匹配任何未跟随的数字序列. 和另一个数字。 1234.5 ,子串123后面没有a . (因为它后跟一个4 ),所以这是一个有效的匹配。

尝试使用结束锚( $ )以确保在匹配的字符串后不显示其他字符:

^[+-]?\d+$

如果您需要允许匹配字符串后面的字符,您可以尝试使用否定前瞻以确保匹配的子字符串后面没有a . 数字:

^[+-]?\d+(?![\d.])

示范


为了匹配字符串像10.ToString()你也可以使用负前瞻,就像这样:

^[+-]?\d+(?!\.?\d)

示范

另一种策略是使用积极的前瞻,如下所示:

^[+-]?\d+(?=\.\D|[^.\d]|$)

示范

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM