2012-11-12 55 views
0

我是PERL新手,正在處理一個正則表達式,僅匹配等於或多於3個字母的單詞。這是我正在嘗試的程序。我嘗試添加\ w {3,},因爲它應該匹配3個以上的字符。但它仍然匹配< 3個字符。例如,如果我給「這是一種模式」。我希望我的$字段只匹配「This」和「Pattern」,並跳過「is」和「a」。Perl正則表達式匹配超過2個字符的單詞

#!/usr/bin/perl 
    while (<STDIN>) { 
      foreach my $reg_part (split(/\s+/, $_)) { 
       if ($reg_part =~ /([^\w\@\.]*)?([\w{3,}\@\(\)\+\$\.]+)(?::(.+))?/) { 
         print "reg_part = $reg_part \n"; 
         my ($mod, $field, $pat) = ($1, $2, $3); 
         print "#$mod#$field#$pat#$negate#\n"; 
       } 
     } 
} 

exit(0); 

我在想什麼?

+0

它需要是一個正則表達式嗎?你是否試圖嚴格匹配字母字符? –

回答

3

你有

[\w{3,}...]+ 

其是相同

[{},3\w...]+ 

我想你想

(?:\w{3,}|[\$\@()+.])+ 
+0

感謝您的糾正。 (?:\ w {3,} | [\ $ \ @()+。])+正是我想要的。基本上與字符類別分開的單詞匹配。 – user1028428

3

打破你的正則表達式。

你知道你想要三個字字符,因此指定: -

# Match three word characters. 

\w{3} 

之後,你真的不介意的話有更多的字符,但你也不會阻止它。

# Match 0 or more word characters 
\w* 

最後,你要確保你有邊界搭上話的結尾。所以,把它放在一起。到至少三個單詞字符,可能匹配一個字,用途: -

# Word boundaries at start and end  
\b\w{3}\w*\b 

注 - \w匹配字母 - 如果它只是阿爾法時你需要: -

# Alpha only 
\b[A-Za-z]{3}[A-Za-z]*\b 
相關問題