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

    好久没写博客,这次写博客主要是针对所学的正则表达式做一个整理.因为用时总是不大把握,每次都得百度,因此将常用的一些正则以及一些比较难记混淆 的字符纪录于此,本篇并不是正则的使用教程,只是一些常用的字符及常用的正则,权当一个工具书使用.当然如果能够解决一些朋友的燃眉之需,那应该是一件非 常令人高兴的事了.本文内容大都摘自其他博客,如有侵权,请指明更正.(HOHO,排版排得好累...)
    常用的元字符有
    . 匹配除换行符以外的任意字符
    \w  匹配字母或数字或下划线或汉字
    \s  匹配任意的空白符
    \d 匹配数字
    \b 匹配单词的开始或结束
    ^ 匹配字符串的开始
    $ 匹配字符串的结束
    常用的限定符
    * 重复零次或更多次
    + 重复一次或更多次
    ? 重复零次或一次
    {n} 重复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

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    关于Java 下 Snappy压缩存文件
    英文分词和中文分词
    vuex requires a Promise polyfill in this browser
    Vue 中 export default 和 module.exports
    Linux 进程以及多线程的支持
    mysqldump
    linux磁 盘分区 挂载
    ubuntu16.04挂载windows NTFS磁盘方法
    Linux服务管理 systemctl命令详解
    nextcloud 安装
  • 原文地址:https://www.cnblogs.com/Athrun/p/1031469.html
Copyright © 2011-2022 走看看