0

我是新开发人员,对正则表达式没有太多了解。今天我指定使用正则表达式修复错误,但经过大量努力我无法找到错误。

这是我的要求。

我的代码是:

string regex = "^([A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]    {1,3}\\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\\*)$";

Regex _hostEndPointRegex = new Regex(regex);

bool isTrue = _hostEndPointRegex.IsMatch(textBox1.Text);

它会为“nikhil-dev.in.abc.ni:8080”之类的域名抛出错误。

我不确定问题出在哪里。

4

1 回答 1

2

您的正则表达式有点多余,因为您或其他已包含在其他或块中的某些内容。

我只是简化了你必须做的事情

(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}

它工作得很好......

我不确定为什么您在允许的字符中有 \,因为我很确定在主机名中不允许使用 \。

您的问题是您的或 | 像这样把事情拆散...

[A-Za-z0-9\\-]+

或者

[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}\\.[A-Za-z0-9]{1,3}

或者

\*

正如评论员所说,第二个区块中不包括“-”。

所以也许你打算

^((?:[A-Za-z0-9\\-]+|[A-Za-z0-9]{1,3})\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}\.[A-Za-z0-9]{1,3}):([0-9]{1,5}|\*)$

然而,前两个 or'ed 项目将是多余的,因为 + 包括 {1-3}。

IE。[A-Za-z0-9\-]+ 也将匹配与 [A-Za-z0-9]{1,3} 匹配的任何内容

您可以使用此工具来帮助测试您的正则表达式: http ://regexpal.com/

我个人认为每个开发人员都应该有regexbuddy

上面的正则表达式虽然有效,但将允许无效的主机名。

它应该被修改为不允许在第一个字符中使用标点符号。

所以应该修改成这样。

(?:[A-Za-z0-9][A-Za-z0-9-]+\.)(?:[A-Za-z0-9-]+\.)+[A-Za-z0-9]{1,3}:\d{1,5}

同样在理论上,主机不允许以连字符结尾。

这一切都太复杂了,我只会使用正则表达式来捕获部分,然后使用 Uri.CheckHostName 来实际检查 Uri 是否有效。

或者您可以只使用 CodeCaster 建议的正则表达式

于 2013-04-17T11:35:51.467 回答