谁能帮我解释一下这个表达方式吗? grep '\([aeiou]\).\1'

谁能帮我解释一下这个表达方式吗? grep '\([aeiou]\).\1'

我发现这个家庭作业表达式将“打印包含元音(a、e、i、o 或 u)的所有行,后跟单个字符,后跟相同的元音。因此,它将找到“eve”或“亚当”,但不是“维拉”。”该表达式工作正常,但我正在寻找可以解释每个部分的作用的人,以便我可以进一步理解它是如何工作的。

答案1

首先,谷歌搜索正则表达式网站。他们会给你很多帮助。例如,尝试 regexone。

其次,要测试或帮助理解正则表达式,请参阅 regex101.com - 这对您有很大帮助,因为它一步步解释了发生的情况;您还可以测试正则表达式。

现在说到表达:

[aeiou]

匹配括号中的任何字符(此处:a、e、i、o 或 u)。

.

匹配任何单个字符

\1

匹配第一个捕获组。

\(anything\)

是一个捕获组。

捕获组是您可以记住以供以后使用的字符串的名称。在这种情况下,捕获 [aeiou] 中的任何字符可以让我们记住我们匹配的内容。如果我们改写这个正则表达式:

[aeiou].[aeiou]

我们无法检查第一个和第二个元音是否相同。

因此,您的正则表达式意味着“匹配“aeiou”中的任何字符,然后匹配任何单个字符,然后匹配第一个字符”。

答案2

首先,\(\)。这意味着“这些转义括号内的任何内容都是一个组,并且可以在表达式中稍后引用”。其中有[aeiou],这意味着“任何字符a, e, i, o, 或u”。单点.表示“任何单个字符”。意思\1是“你在第一组匹配时发现的东西”。

相关内容