Jam*_*add 3 .net c# regex silverlight
我正在尝试使用以下正则表达式匹配可以包含任意数量的数字字符或小数点的字符串:
([0-9.])*
Run Code Online (Sandbox Code Playgroud)
这里有一些C#代码来测试正则表达式:
Regex regex = new Regex("([0-9.])*");
if (!regex.IsMatch("a"))
throw new Exception("No match.");
Run Code Online (Sandbox Code Playgroud)
我希望在这里抛出异常,但它不是 - 我是否正确使用正则表达式或模式中是否有错误?
编辑:我也想匹配一个空白字符串.
Jul*_*iet 10
的*量词意为"匹配0或更多个".在你的情况下,"a"返回0匹配,所以正则表达式仍然成功.你可能想要:
([0-9.]+)
Run Code Online (Sandbox Code Playgroud)
的+量词意为"匹配1个或更多,所以在非数字输入失败,并返回没有匹配的快速自旋的.正则表达式测试仪显示:
input result
----- ------
[empty] No matches
a No matches
. 1 match: "."
20.15 1 match: "20.15"
1 1 match: "1"
1.1.1 1 match: "1.1.1"
20. 1 match: "20."
Run Code Online (Sandbox Code Playgroud)
看起来我们有一些误报,让我们修改正则表达式:
^([0-9]+(?:\.[0-9]+)?)$
Run Code Online (Sandbox Code Playgroud)
现在我们得到:
input result
----- ------
[empty] No matches
a No matches
. No matches
20.15 1 match: "20.15"
1 1 match: "1"
1.1.1 No matches: "1.1.1"
20. No matches
Run Code Online (Sandbox Code Playgroud)
凉意.
小智 8
你应该使用+而不是*
Regex reg = new Regex("([0-9.])+");
Run Code Online (Sandbox Code Playgroud)
这应该工作正常.
当你使用*时,任何字符串都可以匹配你的情况.
小智 8
Regex.IsMatch("a", "([0-9.])*") // true
Run Code Online (Sandbox Code Playgroud)
这是因为该组可以匹配ZERO或更多次.
Regex.IsMatch("a", "([0-9.])+") // false
Run Code Online (Sandbox Code Playgroud)