正则表达式详细讲解篇

正则表达式详细讲解篇

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

相关推荐

  • checkbox选中和不选中 jqu_jquery checkbox 选中不选中

    checkbox选中和不选中 jqu_jquery checkbox 选中不选中展开全部$(function(){//动态绑定默认状态//$(“#ck”).attr(“checked”,true)//选中//$(“#ck”).attr(“checked”,false)//未选中//点击判断选中还是未选中$(“#ck”).click(function(){if($(this).is(“:checked”)){alert(“选中”);}else{alert…

    2022年6月30日
  • Visual Studio中C++关于Unicode字符集和多字节字符集

    Visual Studio中C++关于Unicode字符集和多字节字符集1.Unicode字符集  原本标准字符集为8位的ASCII码,但世界上的书写语言不能简单地用256个8位代码即一字节表示,就试更宽的值,例如16位值。这就是Unicode非常简单的原理。与混乱的256字符代码映射,以及含有一些单字节代码和一些双字节代码的双字节字符集不同,Unicode是统一的16位系统,这样就允许表示65536个字符。在这里会高兴地告诉你前128个Unicode字符(1

    2022年10月26日
  • ContentPlaceHolder控件设计缺陷

    ContentPlaceHolder控件设计缺陷(图一)(图二)大家看到上面两张图,我分别拖入了两个DataList与ObjectDataSource控件了,又分别放到两个ContentPlaceHolder控件内,选择数据源时可以看到ObjectDataSource1与ObjectDataSource2,但只能选择各自ContentPlaceHolder嵌套内的ObjectDataSource控件,如果content3选择conte…

    2022年7月13日
  • windows程序设计第五版_windows程序设计入门

    windows程序设计第五版_windows程序设计入门Ellipse函数的用法函数功能:该函数用于画一个椭圆,椭圆的中心是限定矩形的中心,使用当前画笔画椭圆,用当前的画刷填充椭圆。函数原型:BOOL Ellipse(HDC hdc, int nLeftRect, int nTopRect, nRightRect, int nBottomRect);参数:hdc:设备环境句柄。nLeftRect:指定限定矩形左上角的X坐标。nTopRect…

    2022年8月18日
  • ajax跨域解除方案,关于Ajax跨域问题及解决方案详析「建议收藏」

    ajax跨域解除方案,关于Ajax跨域问题及解决方案详析「建议收藏」复现Ajax跨域问题做两个简单的小项目复现Ajax跨域问题.后端语言使用Java首先是一个简单的订单系统,通过访问/loadOrderList,最终以json串形式返回订单集合.该项目使用Tomcat发布在7070端口.@RequestMapping(“/loadOrderList”)@ResponseBodypublicListloadOrderList(Stringuid){//…

    2022年8月24日
  • Tomcat安装及配置教程[通俗易懂]

    Tomcat安装及配置教程[通俗易懂]步骤一:下载Tomcat链接如下:https://tomcat.apache.org/注意:要根据自己的JDK版本选择Tomcat的版本。因本人java版本为10.0.2,故选择Tomcat9.0.31版本(Windows请自行选择64位或32位)步骤二:配置环境变量新建系统环境变量:修改系统Path(变量值末尾添加%CATALINA_HOME%\bin…

    2022年6月4日

发表回复

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

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