-3

perl regexp を使用して次の文字列を照合するにはどうすればよいですか?

$line="virtual void function";
$line="virtual function";
$line="void function";
$line="function";
$line="pure virtual function";
$line="extern function";
$line="extern void function";

つまり、少なくとも 1 つのスペースで区切られた 0 個または n 個の関数修飾子に一致し、その後に文字列 "function" が続きます。

似合わないはず

$line="// function";
$line="asdfgh";     
$line="endfunction";     

に似たものはありますか

$line=~/^([evp\s]*) function/ ;

文字の代わりに単語に使用できるのはどれですか?

4

2 に答える 2

1

私は池上のものによく似た解決策を思いつきました:

#!/usr/bin/env perl
use strict;
use warnings;

my @lines = (
    "virtual void function",
    "virtual function",
    "void function",
    "function",
    "pure virtual function",
    "extern function",
    "extern void function",
    "// function",
    "asdfgh",
    "endfunction",
);

foreach my $line (@lines) {
    if ($line =~ m{^((virtual|void|pure|extern)\s+)*function}) {
        print "$line is a " . ($1||"'plain function'") . "\n";
    }
    else {
        print "ignored: $line\n";
    }
}

生成するもの:

$ perl 17662838-perl-regex-word-matching.pl
virtual void function is a void
virtual function is a virtual
void function is a void
function is a 'plain function'
pure virtual function is a virtual
extern function is a extern
extern void function is a void
ignored: // function
ignored: asdfgh
ignored: endfunction
于 2013-07-15T22:17:21.777 に答える