前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >好物分享第13弹:正则表达式简明学习指南

好物分享第13弹:正则表达式简明学习指南

作者头像
北野茶缸子
发布2021-12-17 10:02:40
1.2K0
发布2021-12-17 10:02:40
举报
文章被收录于专栏:北野茶缸子的专栏

根据正则表达式 – 语法 | 菜鸟教程 (runoob.com)[1] 描述:正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

借助正则表达式,我们可以用简单的字符组合,实现多个文本内容的表达:PY{:3}N可表示 PN PYN PYYN PYYYN

1)选择

可以通过竖直分隔符用于选择,比如 boy|girl 匹配boy 或girl。

2)数量限定

代码语言:javascript
复制
* # 星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次),
# 例如,“0*42”可以匹配 42、042、0042、00042 等。

? # 表示前面的字符最多出现一次(0 次或 1 次)

+ # 表示前面的字符必须出现至少一次(1 次或多次)

此外,还有:

代码语言:javascript
复制
. 表示任何单个字符
{m},扩展前一个字符串m次;ab{2}c,表示abbc。
{m,n},扩展前一个字符串m 到n次;ab{1,2}c,表示abc,abbc。

3)范围与优先级

()圆括号可以用来定义模式字符串的范围和优先级,这可以简单的理解为是否将括号内的模式串作为一个整体。例如,"gr(a|e)y"等价于"gray|grey",(这里体现了优先级,竖直分隔符用于选择 a 或者 e 而不是 gra 和 ey),"(grand)?father"匹配 father 和 grandfather(这里体现了范围,?将圆括号内容作为一个整体匹配)。

4)限定范围

代码语言:javascript
复制
[] 对单个字符给出取值范围;[abc]表示a或b或c,[a-f]表a-f中的任意一个字符串。
[^ ],与[]相反,指取值范围以外字符;[^abc]表示非a非b非c。

. 表示任何单个字符
^,表示字符串开头部分;^abc,匹配abc 开头的字符串。
$,匹配字符串结尾;abc$,匹配abc 结尾的字符串。

5)语法

由于正则表达式存在多种不同的语法(类似于方言的赶脚),而主要学习的是PCRE 子集,其适用于perl和python编程语言及grep或egrep的正则表达式匹配规则。

PCRE(Perl Compatible Regular Expressions 中文含义:perl 语言兼容正则表达式)是一个用 C 语言编写的正则表达式函数库,由菲利普.海泽(Philip Hazel)编写。PCRE 是一个轻量级的函数库,比 Boost 之类的正则表达式库小得多。PCRE 十分易用,同时功能也很强大,性能超过了 POSIX 正则表达式库和一些经典的正则表达式库。

额外补充一些:

代码语言:javascript
复制
\d 数字,等价于[0-9]
\D 非数字。
\w 单词字符,等价于[A-Z], [a-z], [0-9] 及 -。
\W 非单词字符。
\t 制表符。
\n 空行。
\s 空格型内容,如\t, \n等。
\S 非空格。

优先级

image.png

总结

实验楼真的很良心了:

小练习

第一题:

? 表() 部分出现0或1次,因此对应字符串为 PN, PYN, PYTHN,PYTHON

第二题:

PYTHON+可表示 PYTHON PYTHONN PYTHONNN ... ...

第三题:

PY{:3}N可表示 PN PYN PYYN PYYYN

经典正则表达式

1)^[A-Za-z]+,匹配开头结尾之间的,也就是任意数目的二十六个大小写字母组成的字符串。可以再加上数字,^[A-Za-z0-9]+2)整数的字符串如何表示呢?^-?\d+

设计正则表达式

匹配IP地址的正则

IP地址分四段,每段为 0-255,比如111.111.111.111(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]) 将每段0-255 用分组标记及或字符,进行表达,包括0-99|100-199|200-249|250-255,四段。将该分组再扩展为四段,其中前三段的末尾有. 。

学习资源

如果想要练习自己的正则表达式掌握情况,可以在这个网站进行练习:https://regex101.com/[2]它不仅会检验你的正则在文字中的结果,并返回匹配的值:

还可以进行语法的检查:

如果你希望将正则使用的代码保存,也支持多种语法的输出:

但缺点是这个网站对于境内用户不是很友好,还有另外一个可以满足正则检查基本功能的网站:https://tool.oschina.net/regex/#[3] 它也提供了一些常用正则表达式的语法,可以结合使用。

参考资料

[1]正则表达式 – 语法 | 菜鸟教程 (runoob.com): https://www.runoob.com/regexp/regexp-syntax.html

[2]https://regex101.com/: https://regex101.com/

[3]https://tool.oschina.net/regex/#: https://tool.oschina.net/regex/#

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1)选择
  • 2)数量限定
  • 3)范围与优先级
  • 4)限定范围
  • 5)语法
  • 优先级
  • 总结
  • 小练习
    • 第一题:
      • 第二题:
        • 第三题:
          • 经典正则表达式
            • 设计正则表达式
              • 匹配IP地址的正则
              • 参考资料
          • 学习资源
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档