zoukankan      html  css  js  c++  java
  • 实用正则表达式(实用篇)

    好久没写博客,这次写博客主要是针对所学的正则表达式做一个整理.因为用时总是不大把握,每次都得百度,因此将常用的一些正则以及一些比较难记混淆的字符纪录于此,本篇并不是正则的使用教程,只是一些常用的字符及常用的正则,权当一个工具书使用.当然如果能够解决一些朋友的燃眉之需,那应该是一件非常令人高兴的事了.本文内容大都摘自其他博客,如有侵权,请指明更正.(HOHO,排版排得好累...)


    常用的元字符有
    . 匹配除换行符以外的任意字符
    \w 匹配字母或数字或下划线或汉字
    \s 匹配任意的空白符
    \d 匹配数字
    \b 匹配单词的开始或结束
    ^ 匹配字符串的开始
    $ 匹配字符串的结束
    常用的限定符
    * 重复零次或更多次
    + 重复一次或更多次
    ? 重复零次或一次
    重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次



    常用的反义字符
    \W 匹配任意不是字母,数字,下划线,汉字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非数字的字符
    \B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符
    贪婪与懒惰限定符
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复

    使用小括号()时的一些特殊语法
    (exp) 匹配exp,并捕获文本到自动命名的组里
    (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
    (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
    (?=exp) 匹配exp前面的位置
    (?<=exp) 匹配exp后面的位置
    (?!exp) 匹配后面跟的不是exp的位置
    (?<!exp) 匹配前面不是exp的位置
    (?#comment) 这种类型的组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

    一些不是很经常使用的字符
    \a 报警字符(打印它的效果是电脑嘀一声)
    \b 通常是单词分界位置,但如果在字符类里使用代表退格
    \t 制表符,Tab
    \r 回车
    \v 竖向制表符
    \f 换页符
    \n 换行符
    \e Escape
    \0nn ASCII代码中八进制代码为nn的字符
    \xnn ASCII代码中十六进制代码为nn的字符
    \unnnn Unicode代码中十六进制代码为nnnn的字符
    \cN ASCII控制字符。比如\cC代表Ctrl+C
    \A 字符串开头(类似^,但不受处理多行选项的影响)
    \Z 字符串结尾或行尾(不受处理多行选项的影响)
    \z 字符串结尾(类似$,但不受处理多行选项的影响)
    \G 当前搜索的开头
    \p{name} Unicode中命名为name的字符类,例如\p{IsGreek}
    (?>exp) 贪婪子表达式
    (?<x>-<y>exp) 平衡组
    (?im-nsx:exp) 在子表达式exp中改变处理选项
    (?im-nsx) 为表达式后面的部分改变处理选项
    (?(exp)yes|no) 把exp当作零宽正向先行断言,如果在这个位置能匹配,使用yes作为此组的表达式;否则使用no
    (?(exp)yes) 同上,只是使用空表达式作为no
    (?(name)yes|no) 如果命名为name的组捕获到了内容,使用yes作为表达式;否则使用no
    (?(name)yes) 同上,只是使用空表达式作为no



    一些常用的正则表达式:

    匹配中文字符的正则表达式: [\u4e00-\u9fa5]
    匹配双字节字符(包括汉字在内):[^\x00-\xff]
    应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)


    匹配空行的正则表达式:\n[\s| ]*\r
    匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
    匹配首尾空格的正则表达式:(^\s*)|(\s*$)

    利用正则表达式分解和转换IP地址:
    下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序:
    function IP2V(ip)
    {
    re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g  //匹配IP地址的正则表达式
    if(re.test(ip))
    {
    return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
    }
    else
    {
    throw new Error("Not a valid IP address!")
    }
    }

    不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下:
    var ip="10.100.20.168"
    ip=ip.split(".")
    alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

    匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
    匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
    用正则表达式限制只能输入中文:
    用正则表达式限制只能输入全角字符:
    用正则表达式限制只能输入数字:
    用正则表达式限制只能输入数字和英文:

    ===========================================================================================
    ^\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 
  • 相关阅读:
    NetSuite Batch Process Status
    NetSuite generated bank files and the Bank Reconciliation process
    Global Search file content in Gitlab repositories, search across repositories, search across all files
    FedEx Package Rate Integration with NetSuite direct integrate by WebServices
    git Merge branches
    git tag and NetSuite deployment tracking
    API 读写cookie的方法
    C# 生成缩略图
    解决jquery操作checkbox全选全不选无法勾选问题
    JS读取写入删除Cookie方法
  • 原文地址:https://www.cnblogs.com/jazzka702/p/1534361.html
Copyright © 2011-2022 走看看