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。本文为博主原创文章,欢迎转载(请转载时注明原文地址)。

正则表达式简介及在C++11中的简单使用

正则表达式简介及在C++11中的简单使用
  • fengbingchun
  • fengbingchun
  • 2017年02月02日 13:41
  • 6693

Oracle 正则表达式

一.    正则表达式简介:     正则表达式,就是以某种模式来匹配一类字符串。一旦概括了某类字符串,那么正则表达式即可用于针对字符串的各种相关操作。例如,判断匹配性,进行字符串的重新组合等。...
  • fjseryi
  • fjseryi
  • 2015年09月18日 09:51
  • 1871

C++ 11 正则表达式

阅读一下C++ 11正则的文档
  • erlang_hell
  • erlang_hell
  • 2016年09月16日 10:36
  • 1404

Linux系统编程(19)——正则表达式在sed和awk中的使用

sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为另一种格式输出。sed和...
  • yincheng01
  • yincheng01
  • 2014年07月26日 11:06
  • 1304

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

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

转:正则表达式简介及在C++11中的简单使用

转自:http://blog.csdn.net/fengbingchun/article/details/54835571 正则表达式简介及在C++11中的简单使用...
  • originalcandy
  • originalcandy
  • 2018年01月04日 15:59
  • 28

比较详细Python正则表达式操作指南(re使用)[11]

在下面的例子里,替换函数将十进制翻译成十六进制: #!python >>> def hexrepl( match ):  "Return the hex string for...
  • CsharpGame
  • CsharpGame
  • 2014年04月19日 23:13
  • 431

正则表达式简介及在C++11中的简单使用

正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex、regexp、RE、regexps、regexes、regexen。        ...
  • shixin_0125
  • shixin_0125
  • 2017年12月11日 09:37
  • 57

js正则表达式小记

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

Java正则表达式小记

http://blog.csdn.net/pipisorry/article/details/51059500 正则表达式的一般规则都一样,见[python正则表达式] java正...
  • pipisorry
  • pipisorry
  • 2016年04月04日 23:25
  • 748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2015-11-19-正则表达式使用小记
举报原因:
原因补充:

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