如何使用regex负前瞻
我试图使用如何使用regex负前瞻,regex,grep,negative-lookahead,Regex,Grep,Negative Lookahead,我试图使用egrep-o-e从文件中获取电子邮件地址,但在一行末尾的地址上遇到了问题 这是我的正则表达式: egrep -o -e "[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+" ~/myfile.txt 我意识到这不会捕获电子邮件地址的所有变化,但如果地址在一行的末尾,这就是我得到的: user@_12345@myemail.com\ul 所以我想我应该尝试一个消极的前瞻,但我不知道如何正确地使用它。我在网上读过一些东西,但我对它的工作原理感到
egrep-o-e
从文件中获取电子邮件地址,但在一行末尾的地址上遇到了问题
这是我的正则表达式:
egrep -o -e "[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+" ~/myfile.txt
我意识到这不会捕获电子邮件地址的所有变化,但如果地址在一行的末尾,这就是我得到的:
user@_12345@myemail.com\ul
所以我想我应该尝试一个消极的前瞻,但我不知道如何正确地使用它。我在网上读过一些东西,但我对它的工作原理感到困惑
这就是我尝试过的:
egrep -o -e "(?!\\[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+)" ~/myfile.txt
Bash失败,未找到事件:\\[.\u a
有什么建议吗?点代表什么
"[._a-zA-Z0-9]+@[._a-zA-Z0-9]+.[._a-zA-Z0-9]+"
^
here
它与at符号匹配。如果删除它,则不带前瞻的原始正则表达式将起作用
此外,
!
是bash(历史扩展)中的一个特殊字符。您必须反斜杠才能按字面意思使用它。bash中将!
插入为历史扩展命令。您应该使用单引号而不是双引号来防止出现这种情况
但是,您应该注意到,您的
grep
版本可能也不支持反向前瞻。在这种情况下,您需要一个更强大的正则表达式工具,如perl
或。它应该与电子邮件地址中的点匹配。.com
不智能?这对我不起作用……:(egrep-o-e”(?\!\[。\u a-zA-Z0-9]+@[.[U a-zA-Z0-9]+.[U a-zA-Z0-9]+“~/myfile.txt
@code4me:Dot在正则表达式中是特殊的,它匹配任何内容。使用\.
或[.]
以逐字匹配圆点。我根据您和@ExplosionPills建议的组合实现了这一点。我还将\b
添加到正则表达式的开头和结尾。ThanksI尝试了这个egrep-o-e'(?!\[。\u a-zA-Z0-9]+.\u a-zA-Z0-9]+..\u a-zA-Z0-9]+.~/myfile.txt
,但运气不好