正则表达式

redo19990701 redo19990701     2023-03-13     123

关键词:

正则表达式的概念

  • 使用单个字符串来描述,匹配一系列符合某个句法规则的字符串.

元字符

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

特殊字符

特别字符 描述
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘ ‘ 或 ‘ ‘。要匹配 $ 字符本身,请使用 $。
( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
. 匹配除换行符 之外的任何单字符。要匹配 . ,请使用 . 。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 [。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n‘ 匹配字符 ‘n‘。‘ ‘ 匹配换行符。序列 ‘‘ 匹配 "",而 ‘(‘ 则匹配 "("。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。
标记限定符表达式的开始。要匹配 ,请使用 。
| 指明两项之间的一个选择。要匹配 |,请使用 |。

反义

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

字符转义

  • 如果要匹配.?之类的符号使用转移

重复模式

  • 重复后什么也不加--贪婪模式
  • 重复后加?--懒惰模式
语法 说明(和之前紧邻元素组合起来表示之前紧邻元素出现次数)
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
n 重复n次
n, 重复n次或更多次
n,m 重复n到m次

分支条件

  • 用|把不同的规则分隔开
  • 从左到右地测试每个条件,如果满足某个分支的话就不去管其它的条件

字符类

  • [0-9]==d
  • [a-z0-9A-Z]==w
  • [&?.]
  • []
  • .==[^ ]

括号的作用

  • 限制多选项的范围
  • 将若干个字符组合为一个单元,受*?+量词作用
  • 记忆包含的文本

非捕获型括号

  • (?:)不会记忆该括号中的内容,不会产生$

反向引用

  • 用括号括起来的内容可以被记忆,可以使用序列12来匹配前面括号匹配中的文本,数字取决于是第几个括号
  • 分组命名(?<name>exp)

环视功能

  • 环视功能不匹配任何字符,只匹配文本中的特定位置,这一点与单词分界符「」、锚点「^」和「$」相似。但是,环视比它们更加通用。

  • 环视不会占用字符

  • 环视类型

    • 顺序环视(?=...),从左至右匹配位置.该位置右边是...
    • 逆序环视(?<=...),从右向左匹配位置.该位置左边是...
  • 实例:(?=Jeffrey)Jeff可以匹配by Thomas Jeffery,不可以匹配Jefferson,因为(?=Jeffery)无法找到位置.

  • (?<=Jeff)(?=s)匹配Jeff(位置)s 顺序环视和逆序环视前后顺序是无关紧要的

    类型 正则表达式 匹配成功的条件
    肯定顺序环视 (?=...) 子表达式可以匹配右侧文本
    肯定逆序环视 (?<=...) 子表达式可以匹配左侧文本
    否定顺序环视 (?!...) 子表达式不可以匹配右侧文本
    否定逆序环视 (?<!...) 子表达式不可以匹配左侧文本

元字符优先级

运算符 描述
转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, n, n,, n,m 限定符
^, $, 任何元字符、任何字符 定位点和序列(即:位置和顺序)
| 替换,"或"操作 字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。

平衡组//递归匹配

  • (?‘group‘)把捕获的内容命名为group并且压入堆栈.
  • (?‘-group‘)从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则匹配失败.
  • (?(group)yes|no)如果堆栈上存在以group为名的捕获内容,继续匹配yes的内容,反之匹配no的内容.
  • (?!)零宽负向先行断言,由于没有后缀表达式,试图匹配总是失败.

经验之谈

  • .*会一直匹配到一行的结束,如果不需要匹配反斜线,可以将每个点号替换为"[^ \]"
  • 处理各种极端情况会降低成本/收益的比例,合适的做法就是不依赖于正则表达式,可以用括号将每个字段括起来,把数字变成程序中的$1,$2,$3,然后进行检验.
  • 多选结构应将可能匹配次数多的子表达式放到前面,以减少回溯.
  • 加号和星号不要作用于一个元素,会产生大量回溯.

效率

  • 消除不必要的括号和字符组
  • 不确定的字符用量词优化,确定的字符不要用两次优化.ddd<d3;111>13.
  • 使用非捕获型括号时,字符串结束/行锚点优化会被关闭.(000|999)$>(?:000|999).
  • 使用非捕获型括号不但能够提高速度,而且会减少回溯使用的状态的数量.
  • 使用锚点^或$,最好将锚点提取出来
  • 从量词中提取必须的元素,xx*代替x+,或者用----0,2代替-4,6.
  • 减少匹配长度

实例

  • IP--------------------------------(1?d?d|2[0-4]d|25[0-5]).(1?d?d|2[0-4]d|25[0-5]).(1?d?d|2[0-4]d|25[0-5]).(1?d?d|2[0-4]d|25[0-5])
  • .*单个字符匹配任意次,贪婪匹配.
  • .*?满足情况的最小匹配,懒惰匹配.
  • 匹配HTML的tag---------------------------------<("[^"]*"|‘[^‘]*‘|[^‘">])*>即<"文本">或<‘文本‘>或<文本>

正则表达式

正则表达式知识要点select工具基本语法通配符的使用搜索文本grep的使用基本的正则表达式正则表达式介绍通配符通用修饰符扩展正则表达式正则表达式分组转义元字符正则表达式和统配符正则表达式和统配符的区别实验案例实... 查看详情

检查正则表达式是不是通过正则表达式有效

】检查正则表达式是不是通过正则表达式有效【英文标题】:Checkisregexisvalidviaregex检查正则表达式是否通过正则表达式有效【发布时间】:2013-04-2917:50:30【问题描述】:出于好奇,是否可以编写一个正则表达式,用于检查其他正... 查看详情

正则表达式(代码片段)

目录今日内容学习目标正则表达式1.1正则表达式的概念及演示1.2正则表达式-字符类1.3正则表达式-逻辑运算符1.4正则表达式-预定义字符1.5正则表达式-数量词1.6正则表达式练习11.7正则表达式练习21.8本地数据爬取1.9网络数据爬取(... 查看详情

[基础]正则表达式

...字符,醉了。一个不错的教程。   首页|正则表达式30分钟入门教程|常用正则表达式|正则表达式速查表|正则表达式测试工具|正则表达式|JavaScript正则在线测试工具(带高亮)|JavaScript正则在线测试工具|正则练习器在线正... 查看详情

正则表达式(代码片段)

1#tool.chinaz.com/regex/这是一个在线的正则表达式测试工具2#re模块,在python中想要使用正则表达式,要使用re模块来进行使用3#正则表达式45#学习正则表达式67#学习使用re模块来操作正则表达式8910#正则表达式是用来做字符串匹配的11#... 查看详情

正则表达式(代码片段)

regularexpression1、正则表达式概述常用的正则表达式引擎POSIX基本正则表达式BRE引擎POSIX扩展正则表达式BRE引擎正则表达式:是一类字符所书写出的模式(pattern)元字符:不表示字符本身的意义,用于额外功能性描述基本正则表达... 查看详情

正则表达式在js中的用法(代码片段)

正则表达式1.正则表达式概述1.1什么是正则表达式1.2正则表达式的特点2.正则表达式在js中的使用2.1正则表达式的创建2.2测试正则表达式3.正则表达式中的特殊字符3.1正则表达式的组成3.2边界符3.3字符类3.3.1[]方括号3.3.2量词符3.4预... 查看详情

java正则表达式

正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如 HelloWorl... 查看详情

java正则表达式

正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如 HelloWorl... 查看详情

vim 正则表达式和普通正则表达式有啥区别?

】vim正则表达式和普通正则表达式有啥区别?【英文标题】:What\'sthedifferencebetweenvimregexandnormalregex?vim正则表达式和普通正则表达式有什么区别?【发布时间】:2010-10-0514:12:04【问题描述】:我注意到vim的替代正则表达式与其他... 查看详情

re正则表达式方法(代码片段)

目录1、python正则匹配1.1re.search正则表达式1.2re.match()正则表达式1.3re.match与re.search的区别1.4检索和替换1.5正则表达式对象1.6正则表达式修饰符-可选标志1.7正则表达式模式1.8正则表达式实例1.9正则表达式re.findall用法来源1、python正... 查看详情

将 js 正则表达式转换为 python 正则表达式

】将js正则表达式转换为python正则表达式【英文标题】:convertjsregexintopythonregex【发布时间】:2014-11-0809:12:58【问题描述】:我正在处理一个项目的一部分,如果可能的话,它将用httpsurl替换httpurl。问题是,它的正则表达式是为ja... 查看详情

正则表达式

第1章 正则表达式1.1 正则表达式的概念正则表达式(英语:RegularExpression,在代码中常简写为regex)。正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开... 查看详情

java正则表达式

Java正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,... 查看详情

linux正则表达式

正则表达式与通配符的区别:最常应用正则表达式的命令是grep(egrep),sed,awk。正则表达式和通配符有本质区别,正则表达式用来找:【文件】内容,文本,字符串。一般只有三剑客支持。通配符用来找:文件名。普通命令都... 查看详情

正则表达式

正则表达式一、什么是正则表达式  正则表达式(RegularExpression,在代码中常简写为regex、regexp或RE)是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑... 查看详情

javascript:正则表达式一个表单验证的例子(代码片段)

阅读目录本文内容:正则表达式:利用正则表达式进行表单验证的例子: 回到顶部本文内容: 正则表达式正则表达式的使用方法正则表达式的特殊匹配字符正则表达式修饰符利用正则表达式进行表单验证的例子 首发... 查看详情

正则表达式概述

正则表达式概述什么是正则表达式**正则表达式(RegularExpression)**是用于匹配字符串中字符串组合的模式。在JavaScript中,正则表达式也是对象通常用来检索,替换哪些某个模式(规则)的文本,例如验证表单:用户名表单只输入英文字... 查看详情