是的,我确定之前已经在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上尝试这一点,在视觉上看起来与我想要的完全一样。我是消极前瞻的新手,所以我显然在这里错过了一些东西,但是它是什么?
另外,我应该说我正在使用它作为我正在编写的解释器的一部分,因此我想在整数之后允许其他内容。 e.g。
12 + some_variable
或(更复杂)......
10.Tostring() <- should still match the '10'
答案 0 :(得分:4)
您的模式匹配任何数字序列,后面跟不是.
和另一个数字。在1234.5
中,子字符串123
后面没有.
(因为后跟4
),所以它是有效匹配。
尝试使用结束锚($
)以确保在匹配的字符串后不显示其他字符:
^[+-]?\d+$
如果您需要允许匹配字符串后面的字符,您可以尝试使用否定前瞻来确保匹配的子字符串后面没有.
或数字:
^[+-]?\d+(?![\d.])
要也匹配10.ToString()
之类的字符串,您也可以使用否定前瞻,如下所示:
^[+-]?\d+(?!\.?\d)
另一种策略是使用正面预测,如下所示:
^[+-]?\d+(?=\.\D|[^.\d]|$)