Regex 搜索正则表达式模式中的混乱
在bash中学习regex时,我试图获取以Regex 搜索正则表达式模式中的混乱,regex,bash,Regex,Bash,在bash中学习regex时,我试图获取以.com 起初我是这样做的: cat patternNpara.txt | egrep "^[[:alnum:]]+(.com)$" 原因:+匹配一个或多个匹配项,因此将其放在alnum之后应获取任何数字、单词或符号的匹配项,但显然,此逻辑失败了 然后我做了这件事:(纯粹是点击并尝试,没有真正应用任何逻辑…)它成功了 cat patternNpara.txt | egrep "^[[:alnum:]].+(.com)$" 什么让我困惑:只匹配一个匹配
.com
起初我是这样做的:
cat patternNpara.txt | egrep "^[[:alnum:]]+(.com)$"
原因:+
匹配一个或多个匹配项,因此将其放在alnum
之后应获取任何数字、单词或符号的匹配项,但显然,此逻辑失败了
然后我做了这件事:(纯粹是点击并尝试,没有真正应用任何逻辑…)它成功了
cat patternNpara.txt | egrep "^[[:alnum:]].+(.com)$"
什么让我困惑:
只匹配一个匹配项,那么,我如何获得输出…我的意思是它如何真正匹配模式
问题:在上述匹配模式中,[[:alnum:]+
和[[:alnum:]]之间有什么区别?+
(这一个中有
)以及它是如何工作的
PS:我在寻找一个可能的解释……不,这样试试看……事情……)强>
文件patternNpara.txt
的一些测试行作为输出获取
valid email = abc@abc.com
invalid email = ab@abccom
another invalid = abc@.com
1 : abc,s,11@gmail.com
2: abc.s.11@gmail.com
看看你的截图,你似乎在试图匹配带有
@
字符的电子邮件地址,而这个字符没有包含在你的正则表达式中。您可以使用此正则表达式:
egrep "[@[:alnum:]]+(\.com)" patternNpara.txt
两个正则表达式之间的差异:
仅匹配[[:alnum:]
。如果有[a-zA-Z0-9]
或@
,则还需要将它们包含在字符类中,
- 您的第二个案例包括.+模式,这意味着任何字符的1个或多个匹配项
egrep ".*\.com$" file.txt
匹配以下所有行
valid email = abc@abc.com
invalid email = ab@abccom
another invalid = abc@.com
1 : abc,s,11@gmail.com
2: abc.s.11@gmail.com
^[:alnum:][].+(.com)$
将起作用,但^[:alnum:][]+(.com)$
将不起作用。原因如下:
^[:alnum:].+(.com)$
表示匹配以a-zA-Z
或0-9
开头、流动两个或更多任意字符并以“com”(而不是“.com”)结尾的字符串^[:alnum:][+(.com)$
表示匹配以一个或多个a-zA-Z
或0-9
开头的字符串,其中一个字符可以是任何字符,并以“com”(而不是“.com”)结尾+
匹配任何字符中的一个或多个。因此,模式匹配一个alnum,后跟一个或多个任意值。如果你给它a.b.com
,它将不匹配。“^[:alnum:]+(.com)$”
工作正常。@anubhava:它在我的机器上不工作。。请查看相同=>@Gene^[:alnum:]+(.com)$
的屏幕截图,因为“.”字符,无法与a.b.com
匹配,但是^[:alnum:]+.com)$
当然可以。@NoobEditor patternPara.txt的内容是什么?WADR,我不是在寻找一种过滤掉这些行的解决方案,我想了解为什么+
可以工作,而只有+
无法捕获字符串!!!但我想我已经解释了为什么你的正则表达式不起作用了。(请参阅有关字符类中缺少@
的说明)。请理解[[:alnum:]
仅匹配[a-zA-Z0-9]
。如果您有@
或逗号,那么您也需要将它们包括在字符类中。仍然不起作用=>..。此外,如果@
是问题的原因,为什么它在第二种情况下有效,而不是在第一种情况下有效???您的第二种情况包括+
模式,这意味着任何字符都有一个或多个匹配项。伙计…如果您给我一个解决方案
,我要求对问题进行解释…(请参阅PS部分)?@NoobEditor已添加解释,请参阅我的更新答案。
.+(?=\.com)