专栏首页dongfanger5分钟轻松学正则表达式

5分钟轻松学正则表达式

正则表达式是什么?

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

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

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

这个表达式可以接受 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 行终止符

贪婪匹配与非贪婪匹配

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

例:

默认贪婪:

使用 ? 转为非贪婪:

忽略大小写

不同编程语言写法不同,比如 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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JMeter实战(一) 体系结构

    此为开篇,介绍JMeter的组成结构,阅读后对JMeter形成整体认知和初步印象。

    dongfanger
  • 学了Java才搞懂JMeter测试计划

    界面上,展示了一个表格,共两列,第一列是 Name,第二列是 Value,分别对应变量名和变量值。

    dongfanger
  • JMeter100个线程竟然只模拟出1个并发

    线程组,是说到 JMeter 会第一时间想到的东西,也是我认为 JMeter 最难理解的知识点。因为项目让你做个压测,首先就是要考虑并发,用 JMeter 就是...

    dongfanger
  • 【开源】小Z为DNSmasq写了一个WEB界面PHPDNS

    DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,它提供了DNS功能和可选择的DHCP功能。使用DNSmasq可以很方便的搭建递归...

    laulzgoay
  • 使用openssl 生成证书

    w候人兮猗
  • 多标签学习的新趋势(2020 Survey)

    随着Deep learning领域的不断发展,我们面对的问题也越发的复杂,也需要考虑高度结构化的输出空间,本文总共分为了六个部分,整理了近年多标签学习在各大会议...

    小白学视觉
  • python编译安装ssl的问题解决

    python编译安装需要ssl模块才能使用pip,且ssl需要支持x509, 如果openssl版本太低,则无法安装ssl对应模块。如果支持ssl,在conf...

    锦小年
  • 浅谈几种设计模式

    策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    田维常
  • 解决报错libssl.so.1.1: cannot open shared object file: No such file or directory

    Centos7默认提供的openssl版本是1.0.2的,某些php扩展或者其他软件依赖1.1以上版本

    沈唁
  • Jenkins CLI,助你轻松管理 Jenkins

    Jenkins CLI,简称 jcli,一个使用 Golang 开发的开源的 Jenkins 命令行工具。它可以帮忙你轻松地管理 Jenkins。无论你是 Je...

    LinuxSuRen

扫码关注云+社区

领取腾讯云代金券