不知道楼主学过perl没有,任何一本perl的书都会很清楚的讲解正则表达式的。搞清楚^、&、|等运算子的功能后,仔细对整个表达式进行分解,解析正则表达式最重要是细心、耐心,难度其实不大的。我见过一个石油钻探程序的一部分,其中有个正则表达式,苦啊...

解决方案 »

  1.   

    ^(http|https|ftp)\:以这个部分为例:
    ^表示匹配以括号中的内容为起始的字符串,后跟一个冒号,\的意思想必不言自明。括号是要全字匹配这个表达式就匹配http:、https:和ftp:,而不匹配smtp:、view-source:之类,因为是全字匹配,所以也不会匹配htp:、htps、fp:之类。在perl中,括号中的内容也可以单独捕获,即表达式运行之后,(括号中)匹配的字符串会单独保存在一个变量中,不晓得C#有否这个功能?
      

  2.   

    [a-zA-Z0-9\-\.]+[]和()不同的地方就是[]不是全字匹配,所以该句就匹配任意英文字的组合,并包括-和.。而+是一个通配符,表示匹配1次或多次。所以该字符可以匹配yahoo、google等字符了。相信按这个思路下去,整个表达式也就慢慢的现出原形了,所以正则表达式的解析过程一是细心二是细心三还是细心。但有时候也不能过分关注于细节,整体的印象还是要建立。原则就是细心、关注细节、注意整体、层层解析
      

  3.   

    ^(http|https|ftp)表示字串要以(http|https|ftp)打头,(http|https|ftp)表示三者中的一个
    连起来就是字串只能以http,https,ftp中的一个打头
    \:  表示一个冒号,因为:在正则表达式中有其他用途,当要表达冒号的时候,就要转义
    //  表示两个/ 
    [a-zA-Z0-9\-\.]+  前面的[a-zA-Z0-9\-\.]表示a-z,A-Z,0-9,-(hyphen)及.(这里也是转义)中的一个.后面的加号表示至少要出现一次前面的东西,比如expert.csdn.或msdn.
    \.  .的转义
    [a-zA-Z]{2,3}  表示在a-z,A-Z中选择,至少出现2次,之多出现3次(就这个表达式来说,就是要匹配com或cn什么的)