正则表达式

zzdbullet zzdbullet     2023-01-29     249

关键词:

一、什么是正则表达式?

有人说,正则表达式是一种特殊的字符串模式,用于匹配一组字符串,就好比用模具做产品,而正则就是这个模具,定义一种规则去匹配符合规则的字符。

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

例如,很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。

和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像

010-12345678或0376-7654321)。

二、正则字符的简单介绍

2.1 元字符介绍

   "^" :^会匹配行或者字符串的起始位置,有时还会匹配整个文档的起始位置。 

   "$"  :$会匹配行或字符串的结尾

    如图,被匹配的字符必须是以This开头有空格也不行,必须以Regex结尾,也不能有空格与其它字符

技术分享图片     技术分享图片

 "" :不会消耗任何字符只匹配一个位置,常用于匹配单词边界 如 我想从字符串中"This is Regex"匹配单独的单词 "is" 正则就要写成 "is"  

     不会匹配is 两边的字符,但它会识别is 两边是否为单词的边界 

 "d": 匹配数字,

    例如要匹配一个固定格式的电话号码以0开头前4位后7位,如0737-5686123  正则:^0ddd-ddddddd$ 这里只是为了介绍"d"字符,实际上有更好的写法会在     下面介绍。

 "w":匹配字母,数字,下划线.

    例如我要匹配"a2345BCD__TTz" 正则:"w+"  这里的"+"字符为一个量词指重复的次数,稍后会详细介绍。

 "s":匹配空格 

    例如字符 "a b c" 正则:"wswsw"  一个字符后跟一个空格,如有字符间有多个空格直接把"s" 写成 "s+" 让空格重复

  ".":匹配除了换行符以外的任何字符

    这个算是"w"的加强版了"w"不能匹配 空格 如果把字符串加上空格用"w"就受限了,看下用 "."是如何匹配字符"a23 4 5 B C D__TTz"  正则:".+"

  "[abc]": 字符组  匹配包含括号内元素的字符 

        这个比较简单了只匹配括号内存在的字符,还可以写成[a-z]匹配a至z的所以字母就等于可以用来控制只能输入英文了,

2.2 几种反义

  写法很简单改成大写就行了,意思与原来的相反,这里就不举例子了

   "W"   匹配任意不是字母,数字,下划线 的字符

   "S"   匹配任意不是空白符的字符

 "D"  匹配任意非数字的字符

   "B"  匹配不是单词开头或结束的位置

   "[^abc]"  匹配除了abc以外的任意字符

 2.3  量词

 先解释关于量词所涉及到的重要的三个概念,,注意,我们这里所说的重复,意思是重复出现几次,例如单个字符a,它的重复次数是0,而对于"aa"则a的重复次数就是1

   贪婪(贪心) "*"字符 贪婪量词会首先匹配整个字符串,尝试匹配时,它会选定尽可能多的内容,如果 失败则回退一个字符,然后再次尝试回退的过程就叫做回溯,它会每次回退一个字符,直到找到匹配的内容或者没有字符可以回退。

   相比下面两种贪婪量词对资源的消耗是最大的,

   懒惰(勉强) "?"  懒惰量词使用另一种方式匹配,它从目标的起始位置开始尝试匹配,每次检查一个字符,并寻找它要匹配的内容,如此循环直到字符结尾处。

   占有  如"+" 占有量词会覆盖事个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,不会回溯,就好比先抓一把石头,然后从石头中挑出黄金

     "*"(贪婪)   重复零次或更多

     例如"aaaaaaaa" 匹配字符串中所有的a  正则: " a* "   会出到所有的字符"a"

     "+"(懒惰)   重复一次或更多次

       例如"aaaaaaaa" 匹配字符串中所有的a  正则: " a+ "  会取到字符中所有的a字符,  "a+"与"a*"不同在于"+"至少是一次而"*" 可以是0次,

       稍后会与"?"字符结合来体现这种区别

     "?"(占有)   重复零次或一次

       例如"aaaaaaaa" 匹配字符串中的a 正则 : "a?" 只会匹配一次,也就是结果只是单个字符a

   "n"  重复n次

       例如从"aaaaaaaa" 匹配字符串的a 并重复3次 正则:  "a3"  结果就是取到3个a字符  "aaa";

   "n,m"  重复n到m次

       例如正则 "a3,4" 将a重复匹配3次或者4次 所以供匹配的字符可以是三个"aaa"也可以是四个"aaaa" 正则都可以匹配到

     "n,"  重复n次或更多次

       与n,m不同之处就在于匹配的次数将没有上限,但至少要重复n次 如 正则"a3," a至少要重复3次

把量词了解了之后之前匹配电话号码的正则现在就可以改得简单点了^0ddd-ddddddd" 0d+?d7 "可以改为" 0d+?d7 "。

这样写还不够完美如果因为前面的区号没有做限定,以至于可以输入很多们,而通常只能是3位或者4位,

现在再改一下 "^0d2,3-d7"如此一来区号部分就可以匹配3位或者4位的了

 2.4 懒惰限定符

  "*?"   重复任意次,但尽可能少重复 

      如 "acbacb"  正则  "a.*?b" 只会取到第一个"acb" 原本可以全部取到但加了限定符后,只会匹配尽可能少的字符 ,而"acbacb"最少字符的结果就是"acb" 

  "+?"  重复1次或更多次,但尽可能少重复

     与上面一样,只是至少要重复1次

  "??"  重复0次或1次,但尽可能少重复

      如 "aaacb" 正则 "a.??b" 只会取到最后的三个字符"acb"

  "n,m?"  重复n到m次,但尽可能少重复

          如 "aaaaaaaa"  正则 "a0,m" 因为最少是0次所以取到结果为空

  "n,?"    重复n次以上,但尽可能少重复

          如 "aaaaaaa"  正则 "a1," 最少是1次所以取到结果为 "a"

 

正则表达式

正则表达式知识要点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中,正则表达式也是对象通常用来检索,替换哪些某个模式(规则)的文本,例如验证表单:用户名表单只输入英文字... 查看详情