[正则表达式入门] 快速入门正则表达式

前言:
一直想发表一篇博文,来对正则表达式的使用进行记录,方便以后的查找,因为正则表达式的使用比较频繁,所以学会正则表达式是很必要的,所以在这里发表一篇博客做一个入门级别的介绍,希望对你们有用,有错误希望指正,互相学习,多多交流。

1. 正则表达式的概念

正则表达式的概念很简单:正则表达式就是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。

2. 正则表达式的场景

列举一些正则表达式使用的场景:

  • 批量提取/替换有规律的字符串
  • 在各种高级的文本编辑器中的使用
  • 在各类办公软件中使用
  • 各种开发语言中的使用(java/JS/golang/php等)
  • 用户输入的合法性验证(IP地址、特殊的订单号要求等)
  • 模板引擎的标签库开发
  • 网络爬虫(抓取机器人的开发)
  • 批量的文本高效处理

3. 工具推荐

在这里推荐一个学习正则表达式要用到的工具regexBuddy这个软件是收费软件,需要破解版的可以到如下链接进行[下载安装](http://www.ddooo.com/softdown/135270.htm)。

4. 初识正则表达式及元字符的认识

windows系统或者Linux系统命令行中就存在最简单的正则表达式,比如:*代表任意长度的字符串,?长度为1的任意字符串等。

4.1 元字符的概念

我们来看这个表:

元字符 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

4.2 元字符反义

语法 说明
\W 匹配任意不是字母,S数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
^x 匹配除了x以外的任意字符
^aeiou 匹配除了aeiou这几个字母以外的任意字符

备注:要注意字符的转义:如果要想匹配点符号、问号符号这样的字符,我们需要进行转义,使用转义字符\来进行进行转义,否则将无法匹配。
上面这些符号我们可以通过regexBuddy这个软件进行测试加深映像。

5. 正则表达式相关使用

5.1 几种重复的模式

语法 说明
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

这里还有一个知识点是分支条件:

  • 用 | 把不同的规则分隔开
  • 从左到右地测试每个条件,如果满足了某个分支的话,就不会去管其它的条件了。

我们平常在看别人的正则表达式的时候,会看到[0-9]这种的,它等于\d。[]中括号里面放置选择的条件。注意这种写法。

5.2 正则表达式的分组

分组就是将子表达式进行做成子集,我们可以使用()进行分组,方便了对match字符串进行划分。
这里设计一个贪婪与懒惰的概念。
贪婪就是:尽可能多的重复;相反懒惰就是:尽可能少重复。

语法 说明
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

5.3 简单demo

1. 例子1
假如我们要匹配ceshi cheshi或home home 这样重复的该如何处理呢?
答:这里就要用到分组了。我们可对单词进行分组,然后以空格作为区分,进行匹配。

答案如下:
\b(?<one>\w+)\b\s+\1\b

2. 例子2
看如下句子:I’m singing while you’re dancing. 找出该句子中带ing的单词。
答:这里我们需要用到零宽断言的知识点,也就是?=exp零宽度正预测先行断言,自身出现的位置的后面能匹配表达式exp。

答案如下:
\b\w+(?=ing\b)

在这里也另一种零宽断言:?<=exp零宽度正回顾后发断言,自身出现的位置的前面能匹配表达式exp。
举个例:I’m reading a book。从这个句子中找出前面是re开头的单词。

(?<=\bre)\w+\b

6. 总结

这篇博客会变学习边更新会持续更新下去…。

发布了197 篇原创文章 · 获赞 73 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39397165/article/details/105334663