0

私はPerlで通常の表現と一致しています。複数行にまたがる一致文。

マッチレギュラーエクスプレッションを1行だけで入力する必要があることに気付きました。複数行に広げると、失敗します。

$array_11 =~ m{By Steve (.*), MarketWatch LONDON (.*) -- Shares of Anglo American rallied on Monday morning as (.*) bet that the mining group will reject a (.*)};'

複数行で書くと、この文字列と一致しません。

4

3 に答える 3

12

前述のように、x修飾子を探しているようです。この修飾子は、正規表現内のすべての空白を無視し、コメントを許可します(#で始まる)。

ただし、あなたの場合は少し醜いです。正規表現で一致させたいすべてのスペースを[]、\ s、または\s+で置き換える必要があるためです。

$array_11 =~ m{By \s+ Steve \s+ (.*), \s+
               MarketWatch \s+ LONDON \s+ (.*) \s+
               -- \s+ Shares \s+ of \s+ Anglo \s+ American \s+ 
               rallied \s+ on \s+ Monday \s+ morning \s+ as \s+ 
               (.*) \s+ bet \s+ that \s+ the \s+ mining \s+ 
               group \s+ will \w+ reject \w+ a \w+(.*)
              }x;

したがって、実際には、おそらく次のように記述します。

my $sentence= q{By Steve (.*), MarketWatch LONDON (.*) }
            . q{-- Shares of Anglo American rallied on Monday morning as (.*) }
            . q{bet that the mining group will reject a (.*)}
            ;
my $array_11=~ m{$sentence};

最後のコメント:$array_11コードの臭いが強いです。配列の場合は、いくつかのスカラー変数ではなく、配列にします。

于 2009-06-22T10:51:17.567 に答える
9

/x修飾子を探している可能性があります。

perldoc perlreから:

x 空白とコメントを許可することで、パターンの読みやすさを拡張します。

于 2009-06-22T08:05:38.680 に答える
1

エスケープされたすべてのスペースは本当に醜く、気を散らします。したがって、ここに代替手段があります:

my ($pattern) = map { qr/$_/ } join q{ }, split q{ }, <<'EOP';
    Steve (.*), MarketWatch LONDON (.*) --
    Shares of Anglo American rallied on Monday morning
    as (.*) bet that the mining group will \w+ reject
    \w+ a \w+(.*)
EOP

$text =~ $pattern;

NB:(.*)OPが何を望んでいるのかわからなかったので、私は残しましたが、mirod's answerに関するAxemanのコメントを参照してください。

于 2009-06-22T16:42:39.090 に答える