2014-02-22 103 views
1

在bash學習正則表達式,我試圖獲取與.com混亂的正則表達式搜索

首先結束的所有行我所做的:

cat patternNpara.txt | egrep "^[[:alnum:]]+(.com)$" 

原因:+匹配一次或多次出現,所以把它放在alnum後應該獲取任何數字,單詞或符號的發生,但顯然,這種邏輯是失敗的....

然後,我做到了這一點:(純粹打了嘗試,未施加任何邏輯真的...)和它的工作

cat patternNpara.txt | egrep "^[[:alnum:]].+(.com)$" 

什麼困惑我:.比賽只有單一的發生,那麼,我怎麼得到輸出.. .i的意思是如何真正匹配模式?

問題:什麼[[:alnum:]]+[[:alnum:]].+之間的差(這其中有.在它)在上述匹配模式和如何其工作???

PS:我要尋找一個可能的解釋......不,嘗試這樣東西... :)

一些測試線的文件patternNpara.txt這是牽強,因爲輸出!

valid email = [email protected] 
invalid email = [email protected] 
another invalid = [email protected] 
1 : abc,s,[email protected] 
2: [email protected] 
+0

'+'匹配1個或多個任意字符。所以這個模式匹配一​​個alnum,然後是一個或者更多的東西。如果你給它'a.b.com',它將不匹配。 – Gene

+0

'「^ [[:alnum:]] +(。com)$」'很好。 – anubhava

+0

@anubhava:其不工作在我machine..please看到相同=> http://i.imgur.com/PkXkA90.png – NoobEditor

回答

1

看你的截圖看來你想匹配了@性格也未包含在您的正則表達式的電子郵件地址。你可以使用這個表達式:比賽僅[a-zA-Z0-9]

  • [[:alnum:]]

    egrep "[@[:alnum:]]+(\.com)" patternNpara.txt 
    

    差之間2正則表達式。如果你有@,,那麼你也需要將它們包含在字符類中。

  • 你的第二種情況是,包括。+模式這意味着任何性質1個或多個匹配
+0

WADR,我不是在尋找一種解決方案來過濾出行,我想了解,爲什麼'。+'有效,而只有'+'無法捕獲字符串! – NoobEditor

+0

但我想我已經解釋了爲什麼你的正則表達式不起作用。 (請參閱有關在角色類中不存在「@」的註釋)。 – anubhava

+0

請理解''[[:alnum:]]'只匹配'[a-zA-Z0-9]'。如果你有'@'或逗號,那麼你需要將它們包含在字符類中。 – anubhava

1

如果要匹配以「.COM」結尾的所有行,你應該使用

egrep ".*\.com$" file.txt 

要符合以下所有線路

valid email = [email protected] 
invalid email = [email protected] 
another invalid = [email protected] 
1 : abc,s,[email protected] 
2: [email protected] 

^[[:alnum:]].+(.com)$的工作,但^[[:alnum:]]+(.com)$不會。這裏是原因:

  1. ^[[:alnum:]].+(.com)$意味着以匹配與a-zA-Z0-9開始字符串,流的兩個或更多的任何字符,並用「COM」(未「.com」之間)結束。
  2. ^[[:alnum:]]+(.com)$表示匹配以一個或多個a-zA-Z0-9開頭的字符串,流動一個字符可能是任何內容,並以'com'(而不是'.com')結尾。
+0

隊友...烏爾給我'solution',我問的這個問題的解釋...(*請參閱PS部分*)??? – NoobEditor

+0

@NoobEditor已添加解釋,請參閱我的更新答案。 –