正则表达式详细讲解篇

正则表达式详细讲解篇

正则表达式,简称为regex,是文本模式的描述方法。

Regular Expression,在代码中常简写为regex、regexp或RE等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。再用正常语言表达出来。

?,*,+,\d,\w 都是等价字符,它们修饰的是前面的匹配类型

?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,} ( 如\w+ 表示匹配一个或多个字母)
\d等价于[0-9],数字(10进制)
\D等价于[^0-9](除0-9的任意非数字字符)
\w等价于[A-Z a-z 0-9],(匹配任意字母以及数字)
\W等价于[^A-Za-z_0-9] (匹配除字母以及数字外的字符)
\s,空格;
\S非空格

常用运算符与表达式:
^ 开始
() 域段,也称为组
[] 包含,默认是一个字符长度,可用于建立自己的字符分类
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度 –一个域段部分包括了()以及后面的匹配长度
. 任何单个字符(. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
常用有用的表达式
[a-zA-Z0-9._%±] 用户名,大小写字母数字加点号后百分号加号或短横
, 分割(\d\d\d\d )与(\d){4}是等效的还是与(\d{4})等效呢?



1.Import re, 调用 re.compiler()括号里的内容都需是字串,显示为浅色

2.字符|称为“ 管道”。希望匹配许多表达式中的一个时, 就可以使用它。例如,
正则表达式 r’Batman|Tina Fey’将匹配’Batman’或’Tina Fey’。

3.匹配多样化
*, ?, +前面的括号都表示匹配它之前的分组括号或者是类型,表示如下
(UML表示法也是一种正则表示法):

  • 等价于{0,}
    ? 等价于{0,1}
  • 等价于{1,}
    如果需要待定次数,则到括号后用花括号
    (ha){3,4}表示将匹配’hahaha’,‘hahahaha’,3到4次

4.待匹配如果有空格

reg = re.compile('(ha){2,3}')
mo2=reg.search('youhahahahahaha')
mo2.group()

‘hahaha’–贪心法所以先取3个的,但

mo1=reg.search('you haha hahaha ha')
mo1.group()

‘haha’—第一次只有二个ha
compile的参数只能为 ’ ‘, r’ ‘,整个正则表达式都需要在内

5.用.点心匹配所有字符,如果要用它的非贪心模式则要用.?
Res = Re.compile(r’<.*?>‘)
Mo = res.search(‘for dinner>’)
Mo.group ‘’
例如我只需要括号里的内容,你就要用到点心了
但点心将匹配除换行外的所有字符,如需要匹配换行则加上 re.DOTALL参数

6.最常用类型
但缩写的字符分类( \d、 \w、 \s 等) 太宽泛。你可
以用方括号定义自己的字符分类。

自定义的部分可用,^表示非,(但不用 ) [ a b c ] 表 示 匹 配 非 a b c 的 字 符 部 分 。 但 一 般 条 件 可 用 和 )^[abc] 表示匹配非abc的字符部分。 但一般条件可用^和 [abc]abc,但是与自定义里的完全不同,它们表示以…开始和以…结束之意。
正则表达式 r’^Hello’匹配 以 ‘Hello’开始的字符串
正则表达式 r’\d$’匹配以数字 0 到 9 结束的字符串
正则表达式语法支持情况
括号用法小结:
小括号()表示创建分组。然后可用group()匹配对象方法
花括号{}表示分组匹配的次数
方括号[ ]表示任选,
^作用,方括号内表示取反,无方括号表示以…开头



本章介绍了许多表示法,所以这里快速复习一下学到的内容:
?匹配零次或一次前面的分组。
匹配零次或多次前面的分组。
+匹配一次或多次前面的分组。
{n}匹配n次前面的分组。
{n,}匹配n次或更多前面的分组。
{,m}匹配零次到m次前面的分组。
{n,m}匹配至少n次、至多m次前面的分组。
{n,m}?或
?或+?对前面的分组进行非贪心匹配。
^spam意味着字符串必须以spam开始。
spam$意味着字符串必须以spam结束。
,匹配所有字符,换行符除外。
\d、\w和\s分别匹配数字、单词和空格。
\D、\W和\S分别匹配出数字、单词和空格外的所有字符。
[abc]匹配方括号内的任意字符(诸如a、b或c),
[^abc]匹配不在方括号内的任意字符。



速记理解技巧
. [ ] ^ $
四个字符是所有语言都支持的正则表达式,所以这四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会懵,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了:
等价:
等价是等同于的意思,表示同样的功能,用不同符号来书写。
?,*,+,\d,\w 都是等价字符
?等价于匹配长度{0,1}
*等价于匹配长度{0,}
+等价于匹配长度{1,}
\d等价于[0-9]
\D等价于[^0-9]
\w等价于[A-Za-z_0-9]
\W等价于[^A-Za-z_0-9]。
常用运算符与表达式:
^ 开始
() 域段
[] 包含,默认是一个字符长度
[^] 不包含,默认是一个字符长度
{n,m} 匹配长度
. 任何单个字符(. 字符点)
| 或
\ 转义
$ 结尾
[A-Z] 26个大写字母
[a-z] 26个小写字母
[0-9] 0至9数字
[A-Za-z0-9] 26个大写字母、26个小写字母和0至9数字
, 分割
分割语法:
[A,H,T,W] 包含A或H或T或W字母
[a,h,t,w] 包含a或h或t或w字母
[0,3,6,8] 包含0或3或6或8数字
语法与释义:
基础语法 “^([]{})([]{})([]{})$”
正则字符串 = “开始([包含内容]{长度})([包含内容]{长度})([包含内容]{长度})结束”

?,,+,\d,\w 这些都是简写的,完全可以用[]和{}代替,在(??(?=)(?!)(?<=)(?<!)(?i)(?)(+?)这种特殊组合情况下除外。
初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换

实例:
字符串;tel:086-0666-88810009999
原始正则:”^tel:[0-9]{1,3}-[0][0-9]{2,3}-[0-9]{8,11}KaTeX parse error: Undefined control sequence: \d at position 102: …价简写后正则写法:”^tel:\̲d̲{1,3}-[0]\d{2,3…” ,简写语法不是所有语言都支持。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115130.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 调用WinSCard 操作CCID读卡器 返回 错误码 0x00000006「建议收藏」

    调用WinSCard 操作CCID读卡器 返回 错误码 0x00000006「建议收藏」1.微软的定义为https://docs.microsoft.com/zh-cn/windows/win32/debug/system-error-codes错误的句柄ERROR_INVALID_HANDLE6(0x6)查看之前的工程是因为此次编译是设置了anyCPU,重新设置平台目标为X86即可,可能是因为WinSCard的dll只支持x86平台。…

    2022年5月14日
    44
  • 亲测无限坐席在线客服系统源码,基于ThinkPHP的一款在线客服系统源码

    亲测无限坐席在线客服系统源码,基于ThinkPHP的一款在线客服系统源码源码简介东西没问题,和别人换的本来说是多语言带机器人翻译之类的,给了个这。。。直接一键安装的,启动两个端口就行了,安装倒是简单编号:ym270品牌:无语言:PHP大小:34.5MB类型:在线客服系统支持:pc+wap亲测无限坐席在线客服系统源码,基于ThinkPHP的一款在线客服系统源码,直接一键安装的,启动两个端口就行了。安装教程:PHP5.6+MySQL5.5+设置网站运行目录为public,配置伪静态规则为thinkphp访问/install.php安装即可亲测无限坐席

    2022年7月19日
    18
  • iBATIS_ibatis

    iBATIS_ibatis1、ibatis中isNotEmpty的作用   &lt;selectid="getCityListByProvinceId"parameterClass="simpleMap"resultClass="dictModel"&gt;  &lt;![CDATA[   selectxiddictCode,xnamedictNamefromcity  ]]&gt;    &l…

    2022年10月7日
    2
  • 个人觉得好用的Xmind快捷键(mac)[通俗易懂]

    个人觉得好用的Xmind快捷键(mac)[通俗易懂]commandN新建脑图空格修改文字Delete删除文字commandZ撤销上一步Enter添加平行分支Tab添加子节点command+/-放大/缩小commandI上传图片command+Shift+H插入超链接command+1,2,3,4,5,6快速添加优先等级图标-收缩目前分支方向键展开当前分支…

    2022年6月5日
    77
  • snmp协议详解-2_icmp报文封装在ip包的数据部分

    snmp协议详解-2_icmp报文封装在ip包的数据部分转自 https://blog.csdn.net/shmily_cml0603/article/details/12968157 一、什么是SNMP?SNMP是简单的网络管理协议,它不是一个软件,而是用于网络管理的一套规则。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。但话又说回来,为什么要使用SNMP协…

    2022年10月16日
    2
  • 请求头header里的contentType为application/json和capplition/x-www-form-urlencoded「建议收藏」

    请求头header里的contentType为application/json和capplition/x-www-form-urlencoded「建议收藏」请求头header里的contentType为application/json和capplition/x-www-form-urlencoded

    2022年4月21日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号