正则表达式简单入门(快速理解掌握)

这是一篇总结,便于以后复习。学完之后,觉得其实写一些简单正则表达式并不是特别难。

它是什么?

通俗易懂的说,就是一条语句,然后能够在一堆字符中找到自己想要的字符。像一些文本编辑器,都能够通过正则表达式,像我们命令行中,我们想删除所有class文件,我们会输入:
del *.class
其中的*号就算一个正则表达式这就是一个简单的正则表达式。
对于我来说,它最大的用处是在爬虫中,能够准确定位自己想要的字符,数据等。

语法

一个正则表达式由两个部分构造而成
字符+重复次数
我们主要用到的一些元字符

元字符意义同义字符
.匹配除换行符以外的任意字符
\w匹配包括下划线的任何单词字符,类似但不等价于这个表达式"[A-Za-z0-9_]"
\s匹配任何不可见字符,包括空格、制表符、换页符等等。[ \f\n\r\t\v]
\d匹配一个数字字符[0-9]
[a-z]字符范围。匹配指定范围内的任意字符。例如,"[a-z]"可以匹配"a"到"z"范围内的任意小写字母字符。
/转义字符,将一些与元字符相同的字符转义使用
限制符意义
*重复前面的子表达式任意次。例如,zo*能匹配"z",也能匹配"zo"以及"zoo"。*等价于{0, }。
+重复前面的子表达式一次或多次(大于等于1次)。例如,“zo+“能匹配"zo"以及"zoo”,但不能匹配"z”。+等价于{1, }。
重复前面的子表达式零次或一次。例如,"do(es)?“可以匹配"do"或"does”。?等价于{0,1}。
{n}n是一个非负整数。匹配重复n次。例如,"o{2}“不能匹配"Bob"中的"o”,但是能匹配"food"中的两个o。
{n,}n是一个非负整数。至少匹配n次。例如,"o{2,}“不能匹配"Bob"中的"o”,但能匹配"foooood"中的所有o。"o{1,}“等价于"o+”。"o{0,}“则等价于"o*”。
{n,m}m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,"o{1,3}"将匹配"fooooood"中的前三个o为一组,后三个o为一组。"o{0,1}“等价于"o?”。请注意在逗号和两个数之间不能有空格。
当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串"oooo","o+“将尽可能多地匹配"o”,得到结果[“oooo”],而"o+?“将尽可能少地匹配"o”,得到结果 [‘o’, ‘o’, ‘o’, ‘o’]
|表示或者,如两个表达式被 | 隔开,只要符合其中之一表达式就会被匹配

更多的元字符符号我们可以看
正则表达式元字符

实例

我们可以找在线测试平台或者一个软件RegexBuddy去测试。

我们要匹配座机电话号码

0\d{2}-\d{8}
0然后再两个数字然后有一个 - 然后有8个数字
匹配0开头的3+8形式的数字组成的号码如053-12345678
0\d{3}-\d{7}
匹配0开头的4+7形式的数字组成的号码如053-12345678

贪婪匹配和懒惰匹配

比如我们一串字符
123abc?456dsad?789vcv?
我们想要匹配123abc?
我们用
.*?\?
.表示任意字符
*表示重复多次
*?表示懒惰匹配
\?表示问号
也就是尽可能少的匹配,只遇到第一个?就结束匹配
如果我们用
.*\?贪婪匹配
那么他会匹配出
123abc?456dsad?789vcv?
尽可能多的匹配,直到遇到最后一个?才结束匹配。

我们用括号来表示一个组,将( 和 ) 之间的表达式定义为"组"(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
就是我们想要匹配一串字符,同时想单独分离出这一串字符里的一小串字符,我们就可以将想要分离的单独字符的表达式用括号括起来,他会保存到一个临时区域,你可以单独调用。
pl:我们有一串字符是这样的
…好吃的东西"name":“泡面”,“brand”:“康师傅”,“productUrl”:"www.paomian.com"欢迎光临…
如果我们想要这个东西的信息
"name":"(.*?)",.*?"productUrl":"(.*?)"
用这个我们可以匹配出来
“name”:“泡面”,“brand”:“康师傅”,“productUrl”:“www.paomian.com”
然后我们单独调用匹配到的字符串的第一个括号内的内容group(1)里匹配到的东西那就是“泡面”。

处理选项

实际我们在使用的时候会有一些处理选项,通过在表达式里插记号的方式来启用绝大多数的模式,在正则的哪里插入,就从哪里启用。

(?i):忽略大小写(CASE_INSENSITIVE)
(?x):忽略空格字符(COMMENTS)
(?s):. 匹配任意字符,包括换行符(DOTALL)
(?m):多行模式(MULTILINE)
(?u):对Unicode符大小写不敏感(UNICODE_CASE),必须启用CASE_INSENSITIVE
(?d):只有’\n’才被认作一行的中止(UNIX_LINES)

结语

我也只是学到一些皮毛,还请大家多多担待。这是我自己所理解的一些正则表达式简单的使用方法。有什么错误的地方欢迎指正
我还看到一个入门视频教程挺好的,链接在这里
https://www.bilibili.com/video/av47287083
文章参考:https://www.w3cschool.cn/rxoyts/3rmwuozt.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏格拉没有鞋底

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值