regex - 理解正则表达式

标签 regex linux bash vim vi

我有两个正则表达式很难理解。下面是两个表达式,后面是我认为正确的表达式。我不确定这些表达式是 RE 还是 ERE。

^\([a-z]\)\1

在行首搜索从 a 到 z 的任何小写字母并匹配一次出现的情况。

^.*\([a-z]*\).*\1.*\1

在行首搜索任何单个字符,后跟零个或多个小写字母 a 到 z,后跟任何单个字符,然后后跟任意两个附加“任意”字符或不包含任何字符

最佳答案

您的第一个正则表达式无效,因为它具有不匹配的 \( 假设您的意思是 ^\([a-z]\)\1 您有以下内容

^ Match at start of line
\([a-z]\) Match a lower case letter and put it into capture buffer 1
\1 Match what is in capture buffer 1

更简单地匹配以相同的两个小写字符开头的任何行

对于 ^.*\([a-z]*\).*\1.*\1

^ Match at start of line
.* Match 0 or more characters
\([a-z]*\) Match a lower case letter 0 or more times and place in capture buffer 1
.* Match 0 or more characters
\1 Match what is in capture buffer 1
.* Match 0 or more characters
\1 Match what is in capture buffer 1

我怀疑这是试图匹配包含任意小写字母序列三次或多次的行。然而,它写得不好,将匹配任何行,因为 \([a-z]*\) 可以匹配空字符串,如果第一个字符之前的行,则该空字符串与正则表达式的其余部分可以匹配开头的整个正则表达式。要解决此问题,您需要将 \([a-z]*\) 更改为 \([a-z][a-z]*\)。 IE。确保您至少捕获一个小写字母。

关于regex - 理解正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52604231/

相关文章:

Python RegEx 底层字符组 - 例如 : Can [0-A] be used?

JavaScript:如何用 a-j 替换 0-9

PHP 正则表达式模板 - 查找所有出现的 {{var}}

linux - 收集文件名的 bash 脚本似乎被空格弄糊涂了

linux - 时间转换在 gnuplot 中不起作用

JavaScript 替换字符串中的所有逗号

linux - 为只有 ssh key 的用户创建密码

python - 如何循环整个 python 脚本以及每次运行更改顺序

c++ - 在 Qt Eventloop 启动之前,我的代码如何接收信号

linux - 在文件的每一行前面打印文件名