• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Further Study of Rugular Expresions第1/2页
    小弟便兴起了学一学re的想法,但小弟天生就比较懒一些,总希望看有没有些快速学习的方式,于是小弟又请出google大神,藉由祂的神 力,小弟在网络上找到了jim hollenhorst先生的文章,经过了阅读,小弟觉得真是不错,所以就做个小心得报告,跟move-to.net的朋 友分享,希望能为各位大大带来一丁点在学习re时的帮助。jim hollenhorst大大文章之网址如下,有需要的大大可直接连结。
      the 30 minute regex tutorial by jim hollenhorst
      http://www.codeproject.com/useritems/regextutorial.asp
      什么是re?
      想必各位大大在做文件查找的时侯都有使用过万用字符”*”,比如说想查找在windows目录下所有的word文件时,你可能就会用”*.doc”这样的方式来做查找,因为”*”所代表的是任意的字符。re所做的就是类似这样的功能,但其功能更为强大。
      写程序时,常需要比对字符串是否符合特定样式,re最主要的功能就是来描述这特定的样式,因此可以将re视为特定样式的描述式,举个例子来说,”\ w +”所代表的就是任何字母与数字所组成的非空字符串(non-null string)。在.net framework中提供了非常强大的类别库, 藉此可以很轻易的使用re来做文字的查找与取代、对复杂标头的译码及验证文字等工作。
      学习re最好的方式就是藉由例子亲自来做做看。jim hollenhorst大大也提供了一个工具程序expresso(来杯咖啡吧),来帮助我们学习re,下载的网址是http://www.codeproject.com/useritems/regextutorial/expressosetup2_1c.zip。
      接下来,就让我们来体验一些例子吧。
      一些简单的例子
      假设要查找文章中elvis后接有alive的文字符串的话,使用re可能会经过下列的过程,括号是所下re的意思:
      1. elvis (查找elvis)
      上述代表所要查找的字符顺序为elvis。在.net中可以设定乎略字符的大小写,所以”elvis”、”elvis”或者是”elvis”都是符合 1 所下的re。但因为这只管字符出现的顺序为elvis,所以pelvis也是符合1所下的re。可以用2的re来改进。
      2. \belvis\b (将elvis视为一整体的字查找,如elvis、elvis乎略字符大小写时)
    “\b”在re中有特别的意思,在上述的例子中所指的就是字的边界,所以\belvis\b用\b把elvis的前后边界界定出来,也就是要elvis这个字。
      假设要将同一行里elvis后接有alive的文字符串找出来,此时就会用到另外二个特别意义的字符”.”及”*”。”.”所代表就是除了换行字符的 任意字符,而”*”所代表的是重复*之前项目直到找到符合re的字符串。所以”.*”所指的就是除了换行字符外的任意数目的字符数。所以查找同一行里 elvis后接有alive的文字符串找出来,则可下如3之re。
      3. \belvis\b.*\balive\b (查找elvis后面接有alive的文字符串,如elvis is alive)
      用简单之特别字符就可以组成功能强大的re,但也发现当使用越来越多的特别字符时,re就会越来越难看得懂了。
    再看看另外的例子
      组成有效的电话号码
      假使要从网页上收集顾客格式为xxx-xxxx的7位数字的电话号码,其中x是数字,re可能会这样写。
      4. \b\d\d\d-\d\d\d\d (查找七位数字之电话号码,如123-1234)
      每一个\d代表一个数字。”-”则是一般的连字符号,为避免太多重复的\d,re可以改写成如5的方式。
      5. \b\d{3}-\d{4} (查找七位数字电话号码较好的方法,如123-1234)
      在\d后的{3},代表重复前一个项目三次,也就是相等于\d\d\d。
      re的学习及测试工具 expresso
      因为re不易阅读及使用者容易会下错re的特性,jim大大开发了一个工具软件expresso,用来帮助使用者学习及测试re,除了上面所述的网址之外,也可以上ultrapico网站(http://www.ultrapico.com)。安装完expresso后,在expression library中,jim大大把文章的例子都建立在其中,可以边看文章边测试,也可以试着修改范例所下的re,马上可以看到结果,小弟觉得非常好用。各位大大可以试试。
      .net中re的基础概念
      特殊字符
      有些字符有特别的意义,比如之前所看到的”\b”、”.”、”*”、”\d”等。”\s”所代表的是任意空格符,比如说spaces、tabs、newlines等.。”\w”代表是任意字母或数字字符。
      再看一些例子吧
      6. \ba\w*\b (查找a开头的字,如able)
      这re描述要查找一个字的开始边界(\b),再来是字母”a”,再加任意数目的字母数字(\w*),再接结束这个字的结束边界(\b)。
      7. \d+ (查找数字字符串)
      “+”和”*”非常相似,除了+至少要重复前面的项目一次。也就是说至少有一个数字。
      8. \b\w{6}\b (查找六个字母数字的字,如ab123c)
      下表为re常用的特殊字符
      . 除了换行字符的任意字符
      \w 任意字母数字字符
      \s 任意空格符
      \d 任意数字字符
      \b 界定字的边界
      ^ 文章的开头,如”^the'' 用以表示出现于文章开头的字符串为”the”
      $ 文章的结尾,如”end$”用以表示出现在文章的结尾为”end”
      特殊字符”^”及”$”是用来查找某些字必需是文章的开头或结尾,这在验证输入是否符合某一样式时特别用有,比如说要验证七位数字的电话号码,可能会输入如下9的re。
      9. ^\d{3}-\d{4}$ (验证七位数字之电话号码)
      这和第5个re相同,但其前后都无其它的字符,也就是整串字符串只有这七个数字的电话号码。在.net中如果设定multiline这个选项,则”^”和”$”会每行进行比较,只要某行的开头结尾符合re即可,而不是整个文章字符串做一次比较。
      转意字符(escaped characters)
      有时可能会需要”^”、”$”单纯的字面意义(literal meaning)而不要将它们当成特殊字符,此时”\”字符就是用来移除特殊字符特别意义的字符,因此”\^”、”\.”、”\\”所代表的就是”^”、”.”、”\”的字面意义。
      重复前述项目
      在前面看过”{3}”及”*”可以用来重复前述字符,之后我们会看到如何用同样的语法重复整个次描述(subexpressions)。下表是使用重复前述项目的一些方式。
      * 重复任意次数
      + 重复至少一次
      ? 重复零次或一次
      {n} 重复n次
      {n,m} 重复至少n次,但不超过m次
      {n,} 重复至少n次
      再来试一些例子吧
      10. \b\w{5,6}\b (查找五个或六个字母数字字符的字,如as25d、d58sdf等)
      11. \b\d{3}\s\d{3}-\d{4} (查找十个数字的电话号码,如800 123-1234)
      12. \d{3}-\d{2}-\d{4} (查找社会保险号码,如 123-45-6789)
      13. ^\w* (每行或整篇文章的第一个字)
      在espresso可试试有multiline和没multiline的不同。
      匹配某范围的字符
      有时需要查找某些特定的字符时怎么辨?这时中括号”[]”就派上了用场。因此[aeiou]所要查找的是”a”、”e”、”i”、”o”、”u”这些 元音,[.?!]所要查找的是”.”、”?”、”!”这些符号,在中括号中的特殊字符的特别意义都会被移除,也就是解译成单纯的字面意义。也可以指定某些 范围的字符,如”[a-z0-9]”,所指的就是任意小写字母或任意数字。
      接下来再看一个比较初复杂查找电话号码的re例子
      14. \(?\d{3}[( ] \s?\d{3}[- ]\d{4} (查找十位数字之电话号码,如(080) 333-1234 )
      这样的re可查找出较多种格式的电话号码,如(080) 123-4567、511 254 6654等。”\(?”代表一个或零个左小括号”(“, 而”[( ]”代表查找一个右小括号”)”或空格符,”\s?”指一个或零个空格符组。但这样的re会将类似”800) 45-3321”这样的电话找出 来,也就是括号没有对称平衡的问题,之后会学到择一(alternatives)来决解这样的问题。
      不包含在某特定字符组里(negation)
      有时需要查找在包含在某特定字符组里的字符,下表说明如何做类似这样的描述。
      \w 不是字母数字的任意字符
      \s 不是空格符的任意字符
      \d 不是数字字符的任意字符
      \b 不在字边界的位置
      [^x] 不是x的任意字符
      [^aeiou] 不是a、e、i、o、u的任意字符
      15. \s+ (不包含空格符的字符串)
      择一(alternatives)
      有时会需要查找几个特定的选择,此时””这个特殊字符就派上用场了,举例来说,要查找五个数字及九个数字(有”-”号)的邮政编码。
      16. \b\d{5}-\d{4}\b\b\d{5}\b (查找五个数字及九个数字(有”-”号)的邮政编码)
      在使用alternatives时需要注意的是前后的次序,因为re在alternatives中会优先选择符合最左边的项目,16中,如果把查找五个数字的项目放在前面,则这re只会找到五个数字的邮政编码。了解了择一,可将14做更好的修正。
    12下一页阅读全文
    上一篇:js取得参数代码
    下一篇:正则表达式之全部符号对照表
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Further Study of Rugular Expresions第1/2页 Further,Study,Rugular,Expresions,