5
#!/usr/bin/perl

use strict;
use warnings;
my $string = "praveen is a good boy";
my @try = split(/([a,e,i,o,u]).*\1/,$string);
print "@try\n";

特定の文字列に隣接する 2 つの母音を含むすべての単語を出力しようとしています。
o/p : "praveen" および "good" である必要があります。

否定 exp [^] を使用して、隣接する 2 つの母音のみを分割して与えようとしました。

4

3 に答える 3

10

Perl 関数splitは、一致するリストを見つけるのにはあまり適していません。代わりに、正規表現修飾子を使用することをお勧めしgます。すべての一致を処理するには、 eg を使用してループするか、while一致のリストを一度に割り当てることができます。

次の例は、隣接する 2 つの母音を含む文字列内のすべての単語に一致する必要があります。

my $string = "praveen is a good boy"; 
while ( $string =~ /(\w*[aeiou]{2}\w*)/g ) { 
  print "$1\n" 
}

出力:

praveen
good

これを行うこともできます:

my @matches = ( $string =~ /\w*[aeiou]{2}\w*/g );

@tryOPで処理していたのと同じように結果を処理します。

于 2013-08-18T15:17:02.950 に答える
6

あなたは次のようなことができます..

#!/usr/bin/perl

use strict;
use warnings;

my $str 
   = "praveen is a good boy\n"
   . "aaron is a good boy\n"
   . "praveen and aaron are good, hoot, ho"
   ;

while ($str =~ /(\w*([aeiou])\2(?:\w*))/g) {
       print $1, "\n";
}

正規表現:

(               group and capture to \1:
 \w*            word characters (a-z, A-Z, 0-9, _) (0 or more times)
   (            group and capture to \2:
    [aeiou]     any character of: 'a', 'e', 'i', 'o', 'u'
   )            end of \2
   \2           what was matched by capture \2
    (?:         group, but do not capture:
      \w*       word characters (a-z, A-Z, 0-9, _) (0 or more times)
    )           end of grouping
)               end of \1

これは基本的に行うことと同じです/(\w*([aeiou])[aeiou]+(?:\w*))/

出力:

praveen
good
aaron
good
praveen
aaron
good
hoot
于 2013-08-18T15:49:06.987 に答える
3
#!/usr/bin/perl

use strict;
use warnings;
my $string = "praveen is a good boy";
my @try = split(/\s/,$string);
for(@try) {
#    if(/[a,e,i,o,u]{2}/) {
    if(/[aeiou]{2}/) { # edited after Birei's comment
        print "$_\n";
    };
};

「split」の第一引数は区切り文字です。分割分割 (-8

于 2013-08-18T15:06:31.223 に答える