2015-11-19-正则表达式使用小记

原创 2015年11月19日 16:08:52

简要

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

元字符metacharacter

代码说明
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束
^匹配字符串的开始
$匹配字符串的结束

限定符

代码/语法说明
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n到m次

反义

查找不属于某个能简单定义的字符类的字符。

代码/语法说明
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符

例子:
\S+匹配不包含空白符的字符串。
<a[^>]+>匹配用尖括号括起来的以a开头的字符串。

分组语法

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

贪婪与懒惰

当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab。这被称为贪婪匹配。
有时,我们更需要懒惰匹配,也就是匹配尽可能少的字符。

代码/语法说明
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复

示例:
a.*?b匹配最短的,以a开始,以b结束的字符串。如果把它应用于aabab的话,它会匹配aab(第一到第三个字符)和ab(第四到第五个字符)。

测试

  • 匹配电话号码测试1
\(?0\d{2}[) -]?\d{8}

这个表达式可以匹配几种格式的电话号码,像(010)88886666,或022-22334455,或02912345678等。我们对它进行一些分析吧:首先是一个转义字符(,它能出现0次或1次(?),然后是一个0,后面跟着2个数字(\d{2}),然后是)或-或空格中的一个,它出现1次或不出现(?),最后是8个数字(\d{8})。

  • 匹配手机号\座机号
    `
    (
    (^(13|15|18|17)[0-9]{9}$) #手机号
    |(^0[1,2]{1}\d{1}-?\d{8}$) #3位区号+8位数字
    |(^0[3-9]{1}\d{2}-?\d{7,8}$) #4位区号+7至8位数字
    |(^0[1,2]{1}\d{1}-?\\d{8}-(\d{1,4})$) #3位区号+8位数字+1到4位分机号
    )
    )

    用SublimeText测试结果如下:
    这里写图片描述

参考网址


  • 如有兴趣进一步探讨,欢迎订阅我的微信公众号(yiyixiaozhi)留言给我。或者在此博客下方进行评论。
  • 公众号二维码:
    一一小之
版权声明:有兴趣深入讨论的话,欢迎评论。或关注我的微信公众号进行留言:yiyixiaozhi。本文为博主原创文章,欢迎转载(请转载时注明原文地址)。

相关文章推荐

transient关键字

一、transient关键字的作用 1、为了数据安全,避免序列化和反序列化。 解释: 当对象被序列化时,被transient关键字修饰的变量不会被序列化到目标文件; 当对象从序列化文件重构对象时(反序...
  • wohyd
  • wohyd
  • 2017年02月08日 10:35
  • 342

System.arraycopy 本地方法 源代码分析

文章中源代码版本 JDK:jdk1.8.0_11 OpenJDK:openjdk-8u40-src-b25-10_feb_2015 Java中的一个数组拷贝内容到另一个数组经常使用System.a...

2015-6-8-python正则表达式模块的使用

0. 前言发现自己在使用python的正则模块的时候,经常忘记具体的使用方法,搜索的话很快能得到解答,但过不了一阵就又忘记,而官方API文档有时候查找也是个麻烦。所以也就写个备忘,按照用途来归纳一下网...

js正则表达式小记

Js正则表达式小记          最近因为一些事情,突然对正则有了兴趣,就到网上搜罗了一些文章,看了一下,发现大同小异,于是决定自己写个小记,为了互联网的开源分享精神,也为了以后查找方便。这篇文章...

Java正则表达式小记

http://blog.csdn.net/pipisorry/article/details/51059500 正则表达式的一般规则都一样,见[python正则表达式] java正...

TIJ4 Access Control 2015-11-19

  • 2015年11月20日 13:38
  • 378KB
  • 下载

正则表达式小记

"^//d+$"  //非负整数(正整数 + 0)  "^[0-9]*[1-9][0-9]*$"  //正整数  "^((-//d+)|(0+))$"  //非正整数(负整数 + 0)  "^-...

cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验

cocos2dx下C++11正则表达式和android下C语言正则表达式的使用--------案例密码校验...

正则表达式11

  • 2014年04月04日 09:37
  • 7.89MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2015-11-19-正则表达式使用小记
举报原因:
原因补充:

(最多只允许输入30个字)