5分钟轻松学正则表达式

5分钟轻松学正则表达式

正则表达式是什么?

正则表达式,是一个表达式,用少量的简单字符,来表示复杂的长字符串。

实际工作用到很多,比如日志搜索、查找替换、JMeter 响应数据提取等。

先看一个例子,用户名包含字符、数字、下划线和连字符,并限制字符的个数:


<span>5分钟轻松学正则表达式</span>

这个表达式可以接受 john_doejo-hn_doejohn12_as,但是无法匹配到 Jo,因为它包含了大写的字母而且太短了。

字符匹配

正则表达式之所以强大,是因为通过一些特殊字符,能让它匹配到更多字符串。

.

匹配任意单个字符除了换行符。

例:.ar => The car parked in the garage.

[ ]

字符集。匹配方括号内的任意字符。并且字符是无先后顺序的。

例:[Tt]he => The car parked in the garage.

方括号的句号就表示句号。

例:ar[.] => A garage is a good place to park a car.

[^ ]

否定的字符集。匹配除了方括号里的任意字符。

例:[^c]ar => The car parked in the garage.

*

匹配 >= 0 个重复的在 * 号之前的字符。

例:a* => babaa123.

例:[a-z]* => The car parked in the garage #21.

* 字符和 . 字符搭配可以匹配所有的字符 .*

+

匹配 >= 1个重复的 + 号前的字符。

例:c.+t => The fat cat sat on the mat.

?

标记 ? 之前的字符为可选,即出现 0 或 1 次。

例:[T]?he => The car is parked in the garage.

{n,m}

匹配 num 个大括号之前的字符或字符集 (n <= num <= m)。

例:[0-9]{2,3} => The number was 9.9997 but we rounded it off to 10.0.

可以省略第二个参数,表示至少。

例:[0-9]{2,} => The number was 9.9997 but we rounded it off to 10.0.

逗号也省略掉则表示重复固定的次数。

例:[0-9]{3} => The number was 9.9997 but we rounded it off to 10.0.

(xyz)

字符集,匹配与 xyz 完全相等的字符串,括号内的被视为一个整体。

JMeter 中,通过小括号来提取字符串中的子字符串。

例:”token”:”(.*?)”,”expired_at” => “token”:”123“,”expired_at”

|

或运算符,匹配符号前或后的字符。

例:”(T|t)he|car” => The car is parked in the garage.

^

字符串开头。

例:”^(T|t)he” => The car is parked in the garage.

$

字符串结尾。

例:”(at.)$” => The fat cat. sat. on the mat.

转义

对于正则表达式的这些特殊字符:

{ } [ ] ( ) / \ + * . $ ^ | ?

如果需要匹配,那么需要使用反斜杠 \ 进行转义。

例:”(f|c|m)at\.?” => The fat cat sat on the mat.

简写字符集

简写 描述
. 除换行符外的所有字符
\w 匹配所有字母数字,等同于 [a-zA-Z0-9_]w是word首字母
\W 匹配所有非字母数字,即符号,等同于: [^\w]
\d 匹配数字: [0-9]d是digital首字母
\D 匹配非数字: [^\d]
\s 匹配所有空格字符,等同于: [\t\n\f\r\p{Z}]s是space首字母
\S 匹配所有非空格字符: [^\s]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符
\v 匹配一个垂直制表符
\p 匹配 CR/LF(等同于 \r\n),用来匹配 DOS 行终止符

贪婪匹配与非贪婪匹配

正则表达式默认是贪婪匹配,也就是会尽可能多的匹配字符串。可以使用 ? 将贪婪匹配模式转化为非贪婪匹配模式。

例:

默认贪婪:


<span>5分钟轻松学正则表达式</span>

使用 ? 转为非贪婪:


<span>5分钟轻松学正则表达式</span>

忽略大小写

不同编程语言写法不同,比如 Python 可以通过 re.compile('pattern', re.I) 来忽略大小写。

在线测试

https://tool.oschina.net/regex/

简要回顾

本文首先通过一个例子介绍了正则表达式是什么样子的,接着对字符匹配的特殊字符进行了讲解和示例说明,然后给出了简写字符集。正则表达式默认是贪婪模式,可以使用 ? 来转为非贪婪。也可以添加参数,让正则表达式忽略大小写等。最后给出了在线测试正则表达式地址,方便调试看结果。本文内容已经足够在工作中使用,更多高级用法可以通过参考资料进一步阅读。

参考资料:

https://en.wikipedia.org/wiki/Regular_expression

https://docs.python.org/3/library/re.html

https://github.com/ziishaned/learn-regex

https://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2657.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Pycharm介绍_怎么用pycharm

    Pycharm介绍_怎么用pycharm一.开发环境介绍每一个项目可能有不同的开发环境,而为了解决这一冲突,pycharm采用了两种环境设置方式:一个是虚拟环境方式:也就是每一个项目配置一个环境,在项目中为venv文件夹创建项目时意味着每一个项目都copy一份新的开发环境,而彼此之间相互独立还有一种方式为采用公用的一个开发环境,常用于各项目之间不会互相影响的情况二.pycharm快捷键Ctrl+Alt+L注释Ctrl+/行注释Ctrl+Alt+L代码格式化Ctrl+D复制当前行三.注释

    2022年10月26日
  • drupal安装配置错误

    drupal安装配置错误安装配置错误#########################################################################1、403错误 查看errorlog发现:AH01630:clientdeniedbyserverconfiguration:F:/phpweb/drupal——————————-…

  • OOXML,XLSX分析

    OOXML,XLSX分析07以上的xlsx是使用了OOXML和zip,将后缀修改为.zip,就可以看到文件,主要分析xl目录下的文件,如图:主要数据文件在xl目录下面styles.xml里面存放着excel的样式数据很

  • FragmentPagerAdapter刷新notifyDataSetChanged无效

    FragmentPagerAdapter刷新notifyDataSetChanged无效网络上会提到pageadapter的刷新方案如下代码: 复写pageradapter的getItemPosition方法设置tag为POSITION_NONE意思是没有找到child要求重新加载。@Override publicintgetItemPosition(Objectobject){   returnPOSITION_NONE; } 结果

  • pytorch固定BN层参数[通俗易懂]

    pytorch固定BN层参数[通俗易懂]背景:基于PyTorch的模型,想固定主分支参数,只训练子分支,结果发现在不同epoch相同的测试数据经过主分支输出的结果不同。原因:未固定主分支BN层中的running_mean和running_var。解决方法:将需要固定的BN层状态设置为eval。问题示例:环境:torch:1.7.0#-*-coding:utf-8-*-importtorchimporttorch.nnasnnimporttorch.nn.functionalasFclassNet(nn.M

  • matlab求解下面的线性规划和整数规划[通俗易懂]

    matlab求解下面的线性规划和整数规划[通俗易懂]matlab求解下面的线性规划和整数规划  本篇博客主要讲了用matlab实际求解整数规划问题,目前还没有时间去自己实现整数规划算法,只能通过调用MATLAB的函数去实现。题目代码第一小题%线性规划代码%authorCanlongf=[-3,-2];A=[2,3;1,0.5];b=[14;4.5];C=[];d=[];xm=[0;0];xM=1e+10*[…

发表回复

您的电子邮箱地址不会被公开。

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