怪异的正则表达比赛

时间:2013-11-21 09:08:17

标签: c# .net regex vb.net

我有以下正则表达式:

Regex.IsMatch(someString, "[1-9][0-9]*\.[0-9]")

我希望someString仅允许x.y表单x > 00 <= y <= 9。 但它不能作为例外工作,例如:

someString = "1.02"
Regex.IsMatch(someString, "[1-9][0-9]*\.[0-9]")

等于true,但不可以 我还尝试了另一个正则表达式:

Regex.IsMatch(someString, "[1-9][0-9]*\.[0-9]{1}")

但它没有任何区别......或者我的模式中是否缺少某些东西?

1 个答案:

答案 0 :(得分:7)

您需要在此处使用行尾^和行尾$定位符,否则您将获得部分匹配,例如更改为:

^[1-9][0-9]*\.[0-9]$

您的原始表达式匹配1.02的{​​{1}}的一部分,虽然它是有效的,但实际上单独使用时有效,锚点会阻止表达式匹配部分字符串并强制整个表达式匹配。