0

私はPERLが初めてで、3文字以上の単語のみに一致する正規表現に取り組んでいます。これが私が試しているプログラムです。\w{3,} を追加してみました。これは、さらに 3 文字と一致する必要があるためです。しかし、まだ 3 文字未満の単語に一致しています。たとえば、「これはパターンです」と指定した場合。$field が "This" と "Pattern" のみに一致し、"is" と "a" をスキップするようにします。

#!/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);

私は何が欠けていますか?

4

2 に答える 2

4

正規表現を分割します。

3 つの単語文字が必要であることはわかっているので、次のように指定します:-

# Match three word characters.

\w{3}

その後、単語に文字数が増えてもあまり気にしませんが、ブロックすることもありません。

# Match 0 or more word characters
\w*

最後に、単語の終わりをキャッチするための境界があることを確認する必要があります。だから、それをすべてまとめる。少なくとも 3 つの単語文字、場合によってはそれ以上の単語を一致させるには、次を使用します。

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

注 -\w英数字に一致します - 必要なアルファベットだけの場合:-

# Alpha only
\b[A-Za-z]{3}[A-Za-z]*\b
于 2012-11-12T21:31:08.230 に答える
3

あなたが持っている

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

これはと同じです

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

私はあなたが欲しいと思います

(?:\w{3,}|[\$\@()+.])+
于 2012-11-12T21:39:41.333 に答える