美文网首页
正则规则

正则规则

作者: 帅哥_刷哥 | 来源:发表于2017-10-10 23:43 被阅读8次
    /…/ 代表一个模式的开始和结束
    ^   匹配字符串的开始
    $   匹配字符串的结束
    (x) 匹配x保存x在名为$1...$9的变量中 
    x|y 匹配x或y 
    [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) 
    [^xyz] 不匹配这个集合中的任何一个字符 
    
    [\b] 匹配一个退格符 
    \b 匹配一个单词的边界 
    \B 匹配一个单词的非边界 
    \cX 这儿,X是一个控制符,/\cM/匹配Ctrl-M 
    \n 匹配一个换行符 
    \r 匹配一个回车符 
    \t 匹配一个制表符 
    \v 匹配一个重直制表符
    \s  任何空白字符
    \S  任何非空白字符
    \d  匹配一个数字字符,等价于[0-9]
    \D  除了数字之外的任何字符,等价于[^0-9]
    \w  匹配一个数字、下划线或字母字符,等价于[A-Za-z0-9_]
    \W 匹配一个不可以组成单词的字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
    
    .   除了换行符之外的任意字符
    
    {n} 匹配前一项n次
    {n,}    匹配前一项n次,或者多次
    {n,m}   匹配前一项至少n次,但是不能超过m次
    *   匹配前一项0次或多次,等价于{0,}
    +   匹配前一项1次或多次,等价于{1,}
    ?   匹配前一项0次或1次,也就是说前一项是可选的,等价于{0,1}
    
    
    
    "^\\d+$"  //非负整数(正整数 + 0) 
    "^[0-9]*[1-9][0-9]*$"  //正整数 
    "^((-\\d+)|(0+))$"  //非正整数(负整数 + 0) 
    "^-[0-9]*[1-9][0-9]*$"  //负整数 
    "^-?\\d+$"    //整数 
    "^\\d+(\\.\\d+)?$"  //非负浮点数(正浮点数 + 0) 
    "^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数
    "^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
    "^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点数
    "^(-?\\d+)(\\.\\d+)?$"  //浮点数 
    "^[A-Za-z]+$"  //由26个英文字母组成的字符串 
    "^[A-Z]+$"  //由26个英文字母的大写组成的字符串 
    "^[a-z]+$"  //由26个英文字母的小写组成的字符串 
    "^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 
    "^\\w+$"  //由数字、26个英文字母或者下划线组成的字符串 
    "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$"    //email地址 
    "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$"  //url 
    
    字符? 
    意义:匹配?前面的字符0次或1次。 
    例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。
    
    var reg=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$/;
    
    //(?![0-9]+$) 不能是纯数字 , 限制 ,不占位
                
    // ?! 开头不能只是拼接数字结尾
    // 开始位置开始算起 , $是一个结尾位置
    //(?![0-9]+$)就是修饰不能是纯数字
                
    // 断言此位置后,字符串结尾之前,所有的字符不能全部由数字([^a-zA-Z]表示非英文字母,结合下文,这里匹配数字)组成。
    // [0-9]+ 是纯数字
    // ?! 不能以后边的这些开始。
    //(?![a-zA-Z]+$) 不能是纯字母 , 限制,不占位
                
    //[0-9A-Za-z]{6,20} 6-20位的字符
    
    var reg=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    
    
    

    2.查找子串在父串中的位置

    >>> re.search(r'shuage','i love shuage!!')
    <_sre.SRE_Match object; span=(7, 13), match='shuage'>
    

    2.查找父串中所有的子串,返回一个数组

    >>> re.findall(r'[a-z]','ShuaiGe')
    ['h', 'u', 'a', 'i', 'e']
    

    3.综合整理

    .        点(.)代表任意字符
    \.       匹配点(.)
    \d      配置所有的数字
    []       匹配[]里面任何一个字符
    {}       前边要匹配的字符要显示多少次
    |        逻辑或
    ()       表示分组
    ^       以字符串开头
    $       以字符串结尾
    \       把元字符变为普通字符,把普通字符变为特殊字符例\d
    \数字   例如\1表示第一组(小括号里面的正则)再重复一次,\2表示第二组再重复一次
                举例: (shuage)\1  == shuageshuage     (shuage)(hao)\2 == shuagehaohao
            
            如果以0开头,或者3个数字的长度,那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的ASCII码值对应的字符
    
    
    [.]  匹配.
    
    [\]   会报错,\ 在[]中表示转意符
    [\n]  表示回车
    [^a-z] 表示除了a-z以外的都匹配,^表示取反
    [a-z^] 表示^本身
    
    *   表示匹配前面的子表达式零次或多次,等价于{0,}
    +  表示匹配前面的子表达式一次或多次,等价于{1,}
    ?   表示匹配前面的子表达式零次或1次,等价于{0,1}
    
    正则默认是贪婪模式,启用非贪婪模式方法:在重复后面加上?就可以了。
    
    
    \b   表示匹配一个单词的边界,被定义为Unidcode的字母数字或者下横线字符也被认为是一个单词的一部分    .()!属于单词的边界
    
    \B   表示匹配非单词边界,其实就是跟上边的相反
    \D  表示匹配跟\d相反的字符
    \s   表示匹配空白字符,例如 \t(制表符)\n(空格)\r(回车)\f(换页)\v(表示垂直的tab键)
    \S  表示与\s相反
    \w 表示匹配单词字符
    \W 表示与\w相反
    
    

    4.正则说明

    [a-z] 匹配所有的小写字母
    [0-9] 匹配所有的数字
    3{3}  3个3   大括号前边这个字符是多少个
    3{3,10}   3-10个3   大括号前边这个字符是多少个
    
    

    5.案例

    匹配(0-255):[01]\d\d|2[0-4]\d|25[0-5]    按照每位来匹配
    匹配ip :(([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3}([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})
      解释:
        ([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1}) : ()小括号里面的是一个完整部分,匹配(0-255)
        (([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.) : 最外边小括号是一个完整部分,匹配(0-255).
        (([01]{0,1}\d{0,1}\d|2[0-4]{0,1}\d{0,1}|25[0-5]{0,1})\.){3} : 表示前边的小括号执行3次
    
    正则默认贪婪模式
    >>> s = '<html><title> i love shuage </title></html>'
    >>> re.search(r'<.+>',s)
    <_sre.SRE_Match object; span=(0, 43), match='<html><title> i love shuage </title></html>'>
    
    启用非贪婪模式
    >>> s = '<html><title> i love shuage </title></html>'
    >>> re.search(r'<.+?>',s)
    <_sre.SRE_Match object; span=(0, 6), match='<html>'>
    
    

    6.编译正则表达式 -- 成模块级别 --有6种编译模式

    >>> p = re.compile(r'[A-Z]')
    >>> p.search('I love ShuaGe')
    <_sre.SRE_Match object; span=(0, 1), match='I'>
    >>> p.findall('I love ShuaGe')
    ['I', 'S', 'G']
    

    相关文章

      网友评论

          本文标题:正则规则

          本文链接:https://www.haomeiwen.com/subject/khvkdxtx.html