初学正则

    最近看到一篇关于“京东定向爬虫“的帖子,觉得好玩,打算学习一下。大致了解了下代码,发现需要用到正则表达式,于是先行简单学习正则。参考了园子里的前辈的博客内容,如有相似,请见谅~

  • 正则简介

      正则表达式就是一种特殊的字符串模式,用来匹配符合规则的字符串。

      在线匹配工具:http://rubular.com/

  • 正则表达式基本语法

      "^":匹配起始位置。("^h":匹配"hello"'、"hi")

      "$":匹配行或字符串的结尾。("^abc$":开始和结尾都是"abc"的字符串,只有"abc")

      "\b":不会消耗任何字符只匹配一个位置,常用于匹配单词边界。

      "\d":匹配数字。("\d{2}":匹配两位数)

      "\w":匹配字母,数字,下划线。

       "\s":匹配空格。

      ".":匹配除了换行符以外的任何字符。

      "[abc]":字符组,匹配包含括号内元素的字符。

      ※大写表示反义:"\W"、"\S"、"\D"、"\B"、"[^abc]"

      "*":重复零次或更多。(贪婪)相当于{0,}。

      "+":重复一次或更多次。相当于{1,}。

      "?":重复零次或一次。相当于{0,1}。

      "{n}":重复n次。

      "{n,m}":重复n到m次。

      "{n,}":重复n次或更多次。

      "*?":重复任意次,但尽可能少重复。(非贪婪)

      "+?":重复1次或更多次,但尽可能少重复。

  • 正则表达式—分组

      先举例,要匹配"abba",正则表达式为"([a-z])([a-z])\2\1"。捕获分组,其实就是括号内的内容,后面有相同的内容时,可以对捕获分组进行后向引用,以简化表达式。

      "(exp)":匹配exp,并捕获文本到自动命名的组里。自动命名:\1、\2...

      "(?<name>exp)":匹配exp,并捕获文本到名称为name的组里。对于上述例子,换种写法,"(?<str1>[a-z])(?<str2>[a-z])\k<str2>\k<str1>",也能实现。

  • 初步实战练习

        /^[0-9]*$/                                            

        ##校验纯数字组合

        /^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){15,19}$/                  

        ##以字母开头、可带数字、“_”、“.”的16~20位字符串

        /^[a-zA-Z]{15,}$/                                      

        ##15位以上纯字母的字符串

        /^1\d{10}$/                                                     

        ##11位电话号码

        /^http[s]{0,1}:\/\/.+$/                                    

        ##校验URL

        /^[\u4E00-\u9FA5]+$/                                      

        ##纯中文字符

        /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/             

        ##email地址      zhang.sh@136mail.net

        /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/         

        ##年-月-日

 

  总结,目前一些基本的正则都可以随手写一写,稍微复杂的,分解一下,才能搞懂。还有很多更复杂的表达式,看了也是头昏脑涨,尤其在贪婪表达的那一块,很容易把自己绕到坑里。对于相同的规则,有的人写出的正则就很妙,有的就很普通。有空还是要多看看别人写的正则,多些思路,扩展自己的思维。

 

’End zsh 20160321

 

posted @ 2016-03-21 12:12  十二分酷  阅读(299)  评论(2编辑  收藏  举报