贪心匹配

在前面章节简单的介绍过量词的使用,例如,使用大括号语法 {} 匹配特定的次数。

正则表达式量词自身是贪心的。贪心的量词会首先匹配整个字符串。尝试匹配时,它会选定尽可能多的内容,也就是整个输入。量词首次尝试匹配整个字符串,如果失败则回退一个字符后再次尝试。

这个过程叫做回溯(backtracking)。它会每次回退一个字符,直到找到匹配的内容或者没有字符可尝试为止。此外,它还记录所有的行为,因此相较另两种方式它对资源的消耗最大。

用 *、+ 和 ? 进行匹配

在您的正则表达式测试工具中输入如下文本:

1
22
333
4444
55555
666666
7777777
88888888
999999999
0000000000

首先,输入 “.*” 模式,它将会以贪心的方式匹配文本中的所有字符。如下图:

您再试试 “9*” 模式,如下图:

上图中,数字 9 的那一行就会被标亮了。现在再试一下:

上图中,依然会将数字 9 的那一行标亮。如果你选择了多行模式,数字9和0的行都会被标亮。因为你选择了多行模式,因此点号会匹配行之间的换行符;正常情况下,他不会匹配换行符。

如果要匹配一个或多个9,可以尝试 “9+” 模式。如下图:

如果要匹配零次或一次(可选),可以使用 “9?” 模式。如下图:

这只会匹配第一个出现的9。这个数字9是可选的,由于它存在于主体中,所以它会匹配并被标亮。如果使用 “99?” 模式。如下图:

则第一个9和第二个9都会匹配。下图列出了基本的量词以及它们的一些可能的作用。这些量词默认是贪心的,这意味它们在第一次尝试时会尽可能多地匹配字符。如下图:

匹配特定的次数

使用花括号可以限制某个模式在某个范围内匹配的次数,未经修饰的量词就是贪心量词。例如:

9{1}

它会匹配第一个 9。更多关于花括号的用法请参考 “大括号{}语法” 章节。大括号语法如下:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号