正则表达式的使用简介

正则表达式常用元字符
  .   匹配除换行符以外的任意字符
  \b   匹配英文单词的开始和结束,只是匹配一个位置
  \d   匹配一个阿拉伯数字,多个数字可以这样 \d{3} 3个连续的数字
  \w   匹配字母或数字或下划线或汉字
  \s   匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等。
  *   表示前边的内容可以连续重复使用任意次以使整个表达式得到匹配
  +   匹配重复1次或更多次
  ^   匹配你要用来查找的字符串的开头,
  $   匹配字符串的结尾,例如:QQ号必须为5位到12位数字时,可以使用:^\d{5,12}$
  ?   重复零或一次
  {n}   重复n次
  {n,}   重复n次或更多
  {n,m}   重复n至m次

分枝条件符号 | :
  \d{5}-\d{4}|\d{5}这个表达式用于匹配美国的邮政编码。美国邮编的规则是5位数字,或者用连字号间隔的9位数字

分组符号 () :
  \d{1,3}\.){3}\d{1,3}是一个简单的IP地址匹配表达式。可能出现 999.999.999.999

  更好的描述
  ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)

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

后向引用:

  用于重复搜索前面某个分组匹配的文本,\1代表分组1匹配的文本
  \b(\w+)\b\s+\1\b可以用来匹配重复的单词,像go go, 或者kitty kitty
  自己指定子表达式的组名:
  (?<Word>\w+)(或者把尖括号换成‘也行:(?‘Word‘\w+)),这样就把\w+的组名指定为Word了
  上一个例子也可以写成这样:\b(?<Word>\w+)\b\s+\k<Word>\b

  捕获 (exp) 匹配exp,并捕获文本到自动命名的组里
  (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?‘name‘exp)
  (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
  零宽断言

  (?=exp) 匹配exp前面的位置
  (?<=exp) 匹配exp后面的位置
  (?!exp) 匹配后面跟的不是exp的位置
  (?<!exp) 匹配前面不是exp的位置
  注释(?#comment) 这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

  (?=exp) 也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp
  \b\w+(?=ing\b) 查找I‘m singing while you‘re dancing.时,它会匹配sing和danc。
  (?<=exp) 也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp
  (?<=\bre)\w+\b 查找reading a book时,它匹配ading
  (?!exp) 零宽度负预测先行断言,断言此位置的后面不能匹配表达式exp。只匹配一个位置,并不消费任何字符
  区别[^x]
  \b((?!abc)\w)+\b匹配不包含连续字符串abc的单词

  一个更复杂的例子 (?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内里的内容
  如:<b>和</b>

注释:
  (?<=       # 断言要匹配的文本的前缀
     <(\w+)>    # 查找尖括号括起来的字母或数字(即HTML/XML标签)
  )         # 前缀结束
  .*        # 匹配任意文本
  (?=       # 断言要匹配的文本的后缀
    <\/\1>    # 查找尖括号括起来的内容:前面是一个"/",后面是先前捕获的标签
  )        # 后缀结束

贪婪与懒惰
  当正则表达式中包含能接受重复的限定符时,
  通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符
  a.*b 来搜索aabab的话,它会匹配整个字符串aabab

  懒惰匹配,也就是匹配尽可能少的字符
  *? 重复任意次,但尽可能少重复
  +? 重复1次或更多次,但尽可能少重复
  ?? 重复0次或1次,但尽可能少重复
  {n,m}? 重复n到m次,但尽可能少重复
  {n,}? 重复n次以上,但尽可能少重复
  a.*?b匹配aabab 找到aab(第一到第三个字符)和ab(第四到第五个字符)
平衡组/递归匹配
  (?‘group‘) 把捕获的内容命名为group,并压入堆栈(Stack)
  (?‘-group‘) 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
  (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
  (?!) 零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败

  < #最外层的左括号
  [^<>]* #最外层的左括号后面的不是括号的内容
  (
  (
  (?‘Open‘<) #碰到了左括号,在黑板上写一个"Open"
  [^<>]* #匹配左括号后面的不是括号的内容
  )+
  (
  (?‘-Open‘>) #碰到了右括号,擦掉一个"Open"
  [^<>]* #匹配右括号后面不是括号的内容
  )+
  )*
  (?(Open)(?!)) #在遇到最外层的右括号前面,判断黑板上还有没有没擦掉的"Open";如果还有,则匹配失败

  > #最外层的右括号

网上的资源及本文参考文献

  参考:http://deerchao.net/tutorials/regex/regex.htm#resources

时间: 2024-11-03 14:25:29

正则表达式的使用简介的相关文章

Python 正则表达式模块 (re) 简介

Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息.Python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配. Python 正则表达式语法 正则表达式可以包含普通字符和特殊字符,普通字符(比如数字或者字母)可以直接对目标字符串

python正则表达式模块re简介

re模块常用的一些功能有: re.match, re.compile, re.search, re.findall,re.finditer,re.sub, re.split 这里分别做简单的介绍,便于以后查询使用 1. re.match re.match是re模块的一个基本方法,理解了该方法再去看其它方法便不难了 基本格式: 1 re.match(pattern, string, flags=0) pattern是匹配模式,string是你要用正则表达式处理的字符串,flags是pattern和

正则表达式和通配符简介

通配符和正则表达式 1.通配符(wild-card pattern)一般是用于匹配文件名,它是由shell解析的,一般用于find(文件搜索).ls(目录).cp(复制).mv(移动)等. shell常见的通配符有 * 0或多个字符 ? 匹配任意一个字符 ~ 当前用户家目录 ~+当前工作目录 ~-前一个工作目录 [list]匹配list中的任意一个单一字符 [^list]匹配除list中的任意单一字符[0-9]或[:digit:]数字0-9匹配 [a-z]或[:lower:]小写字母a-z匹配

Python学习笔记5(字符串与正则表达式)

1.字符串 1.1字符串的格式化 #格式化语法 "%s" % str1 "%s %s" % (str1,str2) #格式化字符串 str1 = "version" num = 1.0 format = "%s" % str1 print (format) format = "%s %d" %(str1, num) print (format) #使用字典格式化字符串 print ("%(vers

17。3.12---re模块--正则表达式操作指南

1----python re模块(Regular Expressioin正则表达式)提供了一个与perl等编程语言类似的正则匹配操作,他是一个处理python字符串的强有力的工具,有自己的语法和独立的处理引擎,几乎所有的编程语言中,正则表达式的语法都是一样的,区别在于他们支持的正则表达式的数量不一样 2---re 正则表达式语法 1) . 匹配任意换行符,也就是"\n"以外的任何字符 \ 转义符,改变原来符号含义, []       中的括号用来创建一个字符集,第一个出现的字符如果是^

grep与正则表达式基础

目录 grep 正则表达式 grep用法简介 我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分. 1 命令:grep 2 格式:grep [option] "pattern" filename 3 选项: 4 -v:反向选择 5 -i:忽略大小写 6 -n:显示行号 7 -c:统计行数 8 -o:仅显示匹配到的字符串 9 -w:匹配整个单词 10 -q:不输出任何信息 11 -A 2:after

Day 11 正则表达式

正则表达式 一.简介 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配到的行打印出来.grep全称是Globally search for a Regular Expression and  print  out the line,表示全局搜索正则表达式并打印匹配结果的意思.Linux下所有用户都可以使用. 二.格式 grep [option] "pattern" FILE 三.常用选项

Python系列之正则表达式

Python 正则表达式模块 (re) 简介 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用这一内嵌于 Python 的语言工具,尽管不能满足所有复杂的匹配情况,但足够在绝大多数情况下能够有效地实现对复杂字符串的分析并提取出相关信息.Python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配. 表 1. 正则表达式语法 符号 说明 实例 . 表示任意字符,如果说指

Java正则表达式基础整理

(一)正则表达式及语法简介 String类使用正则表达式的几个方法: 正则表达式支持的合法字符: 特殊字符: 预定义字符: 方括号表达式: 圆括号表达式:用于将多个表达式组成一个子表达式,可以使用或运算符“|”,比如正则表达式:"(aa|bb|cc)"就表示匹配"aa"."bb"."cc"三个字符串中的其中一个. 边界匹配符: 贪婪.勉强.占有模式的数量标识符: (二)Java正则表达式的简单用法 两个关键类:(1)Patte