用于检查URL是否具有特定格式的正则表达式

时间:2014-07-30 15:25:39

标签: c# regex

oI有以下代码尝试验证URL是否具有某种格式: 我已经提出了这个正则表达式,但由于我缺乏经验,我似乎无法弄清楚它到底出了什么问题。

正则表达式的所有网址都是http / https,www / Bil / Qc,product.company,qc1 / qc2 / com。

任何人都认为这有任何问题,它应该正确匹配:

string origin = "https://bil-product.company.com/";
Regex reg = new Regex("(http[s]?://)+(BIL|QC)*product.company.(qc1|qc2|com)", RegexOptions.Singleline & RegexOptions.IgnoreCase);

if (reg.IsMatch(origin))
{
    //Do thangs with codes and stuff
}

3 个答案:

答案 0 :(得分:3)

此正则表达式匹配:

(http[s]?://)+(BIL|QC).*product\.company\.(qc1|qc2|com)

您在-之前忘记了product。我用*替换了-(不知道你为什么在那里使用它)。但还有一些其他问题:

  1. 它不会起作用,因为选项必须是" OR ed"而不是" AND ed" (AND重置标志):

    Regex reg = new Regex(..., RegexOptions.Singleline | RegexOptions.IgnoreCase);
    
  2. 为什么(http[s]?://)+允许此模式发生一次或更多次,因此您的模式匹配https://https://bil-product.company.com/

答案 1 :(得分:3)

不应该使用OR运算符|在最后组合正则表达式标志?也许RegexOptions.Singleline | RegexOptions.IgnoreCase可以做到这一点。由于AND运算符,您的代码可能不会使用RegexOptions.IgnoreCase

除了其他问题,以下代码也可以使用:

string origin = "https://bil-product.company.com/";
Regex reg = new Regex("(http[s]?://)((BIL|QC)-)?product\\.company\\.(qc1|qc2|com)", RegexOptions.Singleline | RegexOptions.IgnoreCase);

if (reg.IsMatch(origin))
{
    //Do things with codes and stuff
}
  • 我删除了协议前缀后面的+。你为什么要允许多个http前缀?
  • 我添加了 - 后面(BIL | QC)
  • 我替换了*?在(BIL | QC) - 部分后面因为我认为这部分不应该多次发生(如果我错了,请随意恢复变更)
  • 我逃脱了点
  • 我修复了旗帜组合

答案 2 :(得分:1)

您不需要RegexOptions.Singleline。看起来您忘记了正则表达式中的“www”和结尾“/”部分。如果您想确保只与所需的字符串完全匹配,可以使用^$分别匹配字符串的开头和结尾,所以......

string[] origins = { "http://qc-product.company.com/",
                       "https://www.company.com/",
                       "https://bil-product.company.com/",
                       "http://company.com/",
                       "http://www.example.com/",
                       "http://www.company.com/example.html" };

Regex reg = new Regex(@"^(http[s]?://)(www|((BIL|QC)-product))\.company\.(qc1|qc2|com)/$", RegexOptions.IgnoreCase);

foreach (string origin in origins)
{
    Console.Write(origin + " ");
    Console.WriteLine(reg.IsMatch(origin) ? "match" : "not");
}

Console.ReadLine();

输出:

http://qc-product.company.com/ match
https://www.company.com/ match
https://bil-product.company.com/ match
http://company.com/ not
http://www.example.com/ not
http://www.company.com/example.html not
相关问题