4

私は正規表現にかなり慣れていないので、助けが必要です。Perlで正規表現を使用していくつかの行をフィルタリングする必要があります。正規表現を別の関数に渡すので、1行で実行する必要があります。

"too long"を含み、で始まらない行のみを選択したい"SKIPPING"

これが私のテスト文字列です:

成熟度が長すぎるので
このボンドをスキップする成熟度が長すぎるのでこのボンドをスキップする成熟度が長すぎるので
このボンドを平手打ちするこの
成熟度が長すぎるこんにちは
これは長すぎる
こんにちは

正規表現ルールは、「長すぎる」で次のように一致する必要があります。

成熟度が長すぎるのでこの結合をスキップする成熟度が長すぎるので
この結合を平手打ち
こんにちはこの成熟度が長すぎる
これは長すぎる

そしてそれはスキップする必要があります:

「こんにちは」が含まれていないため「長すぎます」
「満期が長すぎるためこの債券をスキップします」が含まれていないため「スキップ」

4

6 に答える 6

3

おそらく単一の正規表現の後であると思いますが、次のようにもっと読みやすいものに分割することを好みます。

use strict;
use warnings;

for my $line ( <DATA> ) {
    next  if $line =~ m/^SKIPPING/;
    next  if $line !~ m/too long/;

    # do something with $line
    chomp $line;
    say "Found: ", $line, ':length=', length( $line );
}

__DATA__
SKIPPING this bond since maturity too long
TKIPPING this bond since maturity too long
SLAPPING this bond since maturity too long
Hello this maturity too long
this is too long
hello there
于 2009-08-20T20:58:56.257 に答える
0
/^(?<!SKIPPING).*too long$/

あなたが探している線に一致します。末尾のドル記号により、「長すぎる」で終わる文字列のみが一致します。

お役に立てれば!

于 2009-08-20T21:03:25.280 に答える