正则表达式入门(一)

2022-04-28 08:40:58 浏览数 (1)

  工作经常会遇到字符匹配问题,简单的一般通过语言本身提供的函数,即可解决。偶尔遇到复杂的,会想到使用正则表达式。但是由于正则表达式不精通,不会使用复杂的表达式,就显得很呆。

  虽然网上关于正则表达式的文章很多,就是感觉一直不得要领。于是决定花个时间,专门学习一下正则表达式。毕竟正则表达式几乎所有语言都支持,是一种通用且实用的技术。

  找到一本关于专门介绍正则表达式的书,《正则表达式必知必会(修订版)》,这本书非常适合入门,循序渐进。看完后即可熟练的使用正则表达式。

  而且不要因为它是一本书就觉得,可能需要花费很久时间去阅读,作者在书中也提到,本书一共十章每章差不到花费十分钟阅读即可,个人觉得花费半天到一天即可完成这本书的学习。

  链接:https://pan.baidu.com/s/16GN62Ip6PpeYET84FUwbzg   提取码:324d

一、正则表达式入门

正则表达式是文本处理方面功能最强大的工具之一。正则表达式语言用来构造正则表达式(最终构造出来的字符串就称为正则表达式),正则表达式用来完成搜索和替换操作。

  二、匹配单个字符

2.1匹配纯文本

Ben是一个正则表达式。因为本身是纯文本,所以看起来可能不像是一个正则表达式,但它的确是。正则表达式可以包含纯文本(甚至可以只包含纯文本)。

  2.1.1  有多个匹配结果

绝大多数正则表达式的实现都提供了一种能够把所有的匹配结果全部找出的机制(通常返回为一个数组或是其他的专用格式)。

比如说,在JavaScript里,可选的g(意思是global,全局)标志将返回一个包含着所有的匹配结果数组。

  2.1.2字母大小写问题

  正则表达式是区分字母大小写的,所以Ben不匹配ben。不过,绝大多数正则表达式的实现也支持不区分大小写的匹配操作。

2.2匹配任意字符

在正则表达式里,特殊字符(或字符集和)用来给出要搜索的东西。. 字符(英文句号)可以匹配任何一个单个的字符。

2.3匹配特殊字符

.字符在正则表达式里有特殊含义,如果模式里需要一个.,就需要在.前面加上一个(反斜杠)字符来进行转义。

三、匹配一组字符串

3.1匹配多个字符中的某一个

在正则表达式里,我们可以使用元字符[和]来定义一个字符集合。

在使用[和]定义的字符集合里,这两个元字符之间的所有字符都是该集合的组成部分,字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本。

3.2利用字符集合区间

3.3取非匹配

字符集合通常用来指定一组必须匹配其中之一的字符。但在某些场合,我们需要反过来做,给出一组不要得到的字符。

换句话说,除了那个字符集合里的字符,其他字符都可以匹配。用元字符^来表明你想对一个字符集合进行取非匹配。

3.4小结

元字符[和]用来定义一个字符集合,其含义是必须匹配该集合里的字符之一。

定义一个字符集合的具体做法有两种:一是把所有的字符都列举出来;二是利用元字符-以字符区间的方式给出。字符集合可以用元字符^来求非;

四、使用元字符

4.1对特殊字符进行转义

4.2匹配空白字符

  rn匹配一个“回车 换行”组合,有许多操作系统(比如Windows)都把这个组合用作文本行的结束标签。

  使用正则表达式rnrn进行的搜索将匹配两个连续的行尾标签,而那正是两条记录之间的空白行。

4.3匹配特定的字符类别

4.3.1匹配数字(与非数字)

4.3.2匹配字母和数字(与非字符和数字)

4.3.3匹配空白字符(与非空白字符)

4.3.4匹配十六进制或八进制数值

  1.使用十六进制

  在正则表达式里,十六进制(逢16进1)数值要用前缀x来给出。比如说,x0A对应于ASCII字符10(换行符),其效果等价于n。

  2.使用八进制值

  在正则表达式里,八进制(逢8进1)数值要用前缀来给出,数值本身可以是两位或三位数字。比如说,11对应于ASCII字符9(制表符),其效果等价于t。

4.4使用POSIX字符类

五、重复匹配

5.1有多少个匹配

  5.1.1匹配一个或多个字符

  想要匹配同一个字符(或字符集合)的多次重复,只要简单给这个字符(或字符集合)加上一个 字符作为后缀就行了。 匹配一个或多个字符(至少一个:不匹配零个字符的情况)。

5.1.2匹配零个或多个字符

*元字符的用法与 完全一样,只要把它放在一个字符(或一个字符集合)的后面,就可以匹配该字符(或字符集合)连续出现零次或多次的情况。

5.1.3匹配零个或一个字符

?元字符只能匹配一个字符(或字符集合)的零次或一次出现,最多不超过一次。

5.2匹配的重复次数

5.2.1为重复匹配次数设定一个精确的值

如果你想为重复匹配次数设定一个精确的值,把那个数字写在{和}之间即可。

比如说,{3}意味着模式里的前一字符(或字符集合)必须在原始文本里连续重复出现3次才算是一个匹配:如果只重复了两次,则不算一个匹配。

5.2.2为重复匹配次数设定一个区间

{}语法还可以用来为重复匹配次数设定一个区间,也就是为重复匹配次数设定一个最小值和一个最大值。这种区间必须以{2,4}这样的形式给出,{2,4}的含义是最少重复2次,最多重复4次。

5.2.3匹配“至少重复多少次”

{}语法的最后一种用法是给出一个最小的重复次数(但不必给出一个最大值)。{}的这种用法与我们用来为重复匹配次数设定一个区间的{}语法很相似,只是省略了最大值部分而已。

比如说,{3,}表示至少重复3次,与之等价的说法是“必须重复3次或更多次”。

5.3防止过度匹配

元字符分“贪婪型”和“懒惰型”两种;在需要防止过度匹配的场合,使用“懒惰型”元字符来构造正则表达式。

吾尝终日而思矣 不如须臾之所学也

0 人点赞