正则表达式详细讲解篇

正则表达式详细讲解篇

正则表达式,简称为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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大批量数据excel下载—本文作者只试了51万数据的下载,用时7秒

    一.背景:现在的项目里,有诸多下载功能,随着数据越来越多,下载的时间也越来越长,很影响用户体验,为了解决这一问题,我不得不挺身而出,斩破难关。项目中原本用的是poi-HSSFWorkbook,但是如果是50万数据量下载,回经历一个漫长的等待过程,然后内存溢出。jxl也不用想了,估计也差不多。二.两种方法:后来从网上搜索发现针对大数据量的导出有两条路可以走:第一:用poi-SXSSFWo

    2022年4月4日
    44
  • 逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值

    逆矩阵的伴随阵的求法_伴随矩阵与原矩阵的特征值1、简单介绍         一个方阵A如果满足,则A可逆,且

    2022年8月21日
    5
  • ManualResetEvent使用演示

    ManualResetEvent使用演示ManualResetEvent允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用Reset以将ManualResetEvent置于非终止状态。此线程可被视为控制ManualResetEvent。调用ManualResetEvent上的WaitOne的线程将阻止,并等待

    2022年7月18日
    13
  • latex在大括号里换行_大括号的解决问题

    latex在大括号里换行_大括号的解决问题存在问题:在编译LaTex的时候,会出现存在大括号\left(\right),但是一旦公式过长需要换行时,例如这个时候会用到\\与&来做换行,但如果直接编译的话,会报错,例如解决办法:在换行符前面加入变成\right.\\与&\left.这样就可以解决大括号换行的问题了,一个小点千万别漏写了…

    2022年10月11日
    6
  • C语言中函数的基本知识

    C语言中函数的基本知识接着上次的数组,这次我们来简单的讲讲C语言里面的函数。函数和指针这两大块,在C语言中占据着重要的位置,是C语言中的主体和核心,所以它们的重要性也就不言而喻了。那什么是函数呢?1:函数是C语言的模块,一块块的,有较强的独立性,可以相互调用,也就是说,你可以在函数A中调用函数B,又可在函数B中调用函数C,不仅如此,你还可以调用函数自身(递归)。2:函数是完成一个个特定任务的语句集合,它能完…

    2022年6月26日
    29
  • MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法

    MySQL 日期和时间戳的转换 | 以及DATE_FORMAT()用法一、MySQL日期和时间戳的转换1.日期转时间戳selectUNIX_TIMESTAMP(‘2018-12-2512:25:00’);结果:15457119002.时间戳转日期:FROM_UNIXTIME(unix_timestamp)–unix_timestamp为时间戳selectFROM_UNIXTIME(1545711900);结果:2018-12-…

    2022年6月15日
    36

发表回复

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

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