gpt4 book ai didi

c# - 为什么这个 C# 正则表达式不起作用?

转载 作者:太空狗 更新时间:2023-10-30 00:25:33 26 4
gpt4 key购买 nike

我尝试编写一个表达式来验证以下模式:

digit[0-9] at 1 time exactly
"dot"
digit[0-9] 1-2 times
"dot"
digit[0-9] 1-3 times
"dot"
digit[0-9] 1-3 times or “hyphen”

例如,这些是合法数字:

1.10.23.5
1.10.23.-

这些不是:

10.10.23.5
1.254.25.3

我使用 RegexBuddy 编写了下一个模式:

[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}|[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.-

在 RegexBuddy 中一切看起来都很完美,但在我的代码中我对非法数字(如 10.1.1.1)变得真实

我编写了下一个验证此模式的方法:

 public static bool IsVaildEc(string ec)
{
try
{
if (String.IsNullOrEmpty(ec))
return false;
string pattern = @"[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}|[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.-";
Regex check = new Regex(pattern);
return check.IsMatch(ec);
}
catch (Exception ex)
{
//logger
}
}

我做错了什么?

最佳答案

你的正则表达式没有锚定到字符串的开头和结尾,因此它也匹配一个子字符串(例如字符串 10.1.1.1 中的 0.1.1.1) .

如您所见,RegexBuddy 匹配第一个“非法”数字中的子字符串。它正确地无法匹配第二个数字,因为根本无法匹配第二个八位字节中的三个数字:

RegexBuddy Screenshot

string pattern = @"^(?:[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.[0-9]{1,3}|[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.-)$";

将解决该问题。

那么,您的正则表达式就不必要地复杂了。以下内容相同但更简单:

string pattern = @"^[0-9]\.[0-9]{1,2}\.[0-9]{1,3}\.(?:[0-9]{1,3}|-)$";

关于c# - 为什么这个 C# 正则表达式不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com