我无法使用这个简单的正则表达式来匹配电子邮件:
'\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\}'