如何用正则表达式匹配重复字符

2022-09-21 09:26:44 浏览数 (1)

之前在网上也看过正则表达式的一些文章,虽然能看得懂,但是不能运用的十分灵活。但是这本书《正则表达式必知必会》从头到尾,一步步的让你搞懂每个字符是干啥的,一步步的让我们理解多个字符拼接在一起是干啥的,在这个过程中,先带你学习知识,然后运用知识,再提出现有知识无法满足的问题,引出新知识,就这样一步步的引导用户去学习,由浅入深。真的非常推荐大家有空可以去看看。

正则表达式(regular expression,简称regex)是一种工具,它是人们为了解决某一类专门的问题而发明的。要想理解正则表达式及其作用,最好的办法是了解它们可以解决什么样的问题。

比如工作中经常会遇到几种场景:

  • 你正在搜索一个文件,这个文件里包含着单词car(不区分字母大小写),但你并不想把包含着字符串car的其他单词(比如scar、carry和incarcerate,等等)也找出来。
  • 你需要在文件里搜索某个特定的文本,但你只想把出现在特定位置的(比如每行的开头或是每条语句的结尾)找出来。

如果认真思考一下那些问题场景,你就会发现它们不外乎两种情况:一种是查找特定的信息(搜索),另一种是查找并编辑特定的信息(替换)。事实上,从根本上来讲,那正是正则表达式的两种基本用途:搜索和替换。给定一个正则表达式,它要么匹配一些文本(进行一次搜索),要么匹配并替换一些文本。

下面跟大家分享一个文中非常经典的正则表达式,如何用正则表达式匹配重复字符。

假设你有一段文本,你想把这段文本里所有连续重复出现的单词(打字错误,其中有一个单词输了两遍)找出来。显然,在搜索某个单词的第二次出现时,这个单词必须是已知的。回溯引用允许正则表达式模式引用前面的匹配结果(具体到这个例子,就是前面匹配到的单词)。把这个问题弄明白的最佳办法是看看它到底是如何工作的。下面是一段包含着2组重复单词的文本。

正文:

表达式:

代码语言:javascript复制
[ ] (w )[ ] 1

结果:

分析:这个模式找到了我们想要的东西,但它是如何做到这一点的呢?[ ] 匹配一个或多个空格,w 匹配一个或多个字母数字字符,[ ] 匹配随后的空格。注意,w 是括在括号里的,它是一个子表达式。这个子表达式不是用来进行重复匹配的,这里根本不涉及重复匹配的问题。这个子表达式只是把整个模式的一部分单独划分出来以便在后面引用。这个模式的最后一部分是1;这是一个回溯引用,而它引用的正是前面划分出来的那个子表达式:当(w )匹配到单词very的时候,1也匹配单词very;当(w )匹配到单词good的时候,1也匹配单词good。

1到底代表着什么?它代表着模式里的第1个子表达式,2代表着第2个子表达式、3代表着第3个;依次类推。于是,在上面那个例子里,[ ] (w )[ ] 1将匹配同一个单词的连续两次重复出现。

0 人点赞