在 Linux 中使用 grep 的正则表达式

在 Linux 中使用 grep 的正则表达式

我无法使用这个简单的正则表达式来匹配电子邮件:

'\w*(?:\.\w*)*@\w*(?:\.\w*)*\w\{2,5\}'

它应该可以工作,因为我已经用正则表达式测试过了,它工作得很好。我认为可选字符类有问题,但我不确定。

答案1

您应该使用带有 perl 正则表达式 (-P选项) 的 grep,它支持前瞻断言,例如(?: )。此外,花括号不应转义。

尝试:

grep -P '\w*(?:\.\w*)*@\w*(?:\.\w*)*\w{2,5}'

由于 perl 表达式是 GNU grep 中的实验性功能,您可能需要更改(?: )( )用户扩展表达式(-E):

grep -E '\w*(\.\w*)*@\w*(\.\w*)*\w{2,5}'

一些扩展表达式实现不支持花括号{}。为了便于移植,您可以使用基本正则表达式。

使用基本正则表达式转义()离开以及{转义}

grep '\w*\(\.\w*\)*@\w*\(\.\w*\)*\w\{2,5\}'

相关内容