微软的帮助里有这个例子:
用于判断邮件地址是否正确:
return Regex.IsMatch(strIn, @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$").ToString();很多地方理解不了,例如:
为什么要加'-\.'
(\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)这句又是什么意思?
请理解的朋友解释一下好吗?可否教我读写正则表达式时的一些窍门?万分感谢!!

解决方案 »

  1.   


    http://www.aspxboy.com/19/category.aspx
      

  2.   

    将这个正则表达式掐头去尾后为:
    ([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)
    分解,用伪代码表示为:string a = ([\w-\.]+)@string b = [0-9]{1,3}\.string c = (\[ b b b)string d = ([\w-]+\.)string e = ( d +);string f = (c | e)string g = [a-zA-Z]{2,4}string h = [0-9]{1,3}string i = (g|h)string j = (\]?)所以上面的那个正则表达式就与f(g|h)i等价
    接下来,我们只要将从a到j每一个很小的正则表达式分析清楚了,整个大的正则表达式也就明白了
    a: ([\w-\.]+)@表示至少有一个单词字符或者一个中划线-,或者一个点.后面有一个@符号
    b: 表示1到3个数字后面有一个点.
    c: c是3个b的组合前面加一个[
    d: 和a相似,只比a少一个@符号
    e: 是表示至少有一个满足d的字符或者字符串
    f: 是表示有一个满足c的字符串或者有一个满足e的字符串
    g: 表示有2到4个小写字母或者大写字母
    h: 表示有1到3个数字
    i: 表示有一个满足g或者h的字符串
    j: 表示有0或者一个]
      

  3.   

    [\w-\.]+中的'-'不是代表范围吗?比如:[a-z]
      

  4.   

    加上(\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)是为了匹配IP地址
    用这个表达式的时候应该设置Ecma选项,否则可能匹配错误的结果(含中文等Unicode字符的结果)