-1

次のすべての文字列を以下の正規表現に一致させたいです。機能していないようです。助言がありますか?

比較する文字列:

5878ce43aa3f1e1d713427d118115310 -1 Script Kiddie <perm>
f939f88b50fa5f0099b6751e7be27761 -1 Hacking <perm>
468f6634c5a9b00b5b3872dd6437143f 1356474103 Being Annoying <7day>

これは私のperlコードです。現時点では機能していません。助言がありますか?

my $bn_re = q{(.+?) (\d+) (.+?)};
4

2 に答える 2

6

最初の 2 つのフィールドに常に空白が含まれていない場合split、LIMIT オプションを使用して 3 つのフィールドのみを取得すると、大きな効果が得られます。

my ($str, $num, $other) = split ' ', $_, 3;

つまり、次のようなファイルを読み取ると仮定します。

while (<>) {
    ... # your code here
}

また、これ:

my $bn_re = q{(.+?) (\d+) (.+?)};

正規表現ではありません。と混同される場合がありq()ますqr()。また、の機能を混同している可能性があります

$str =~ $bn_re;

match operator に正規表現が自動的に含まれますm//。ただし、使用する必要がありますqr()q()演算子は、一重引用符が行うことを行います。

.+?また、許可した場合、単一の文字に一致することに注意してください。「正規表現」の最後にあるように。文字列の最後で、次のいずれかを行います

... (.+)/    # matching greedily 
... (.+?)$/  # using anchor to end of string
于 2013-07-06T17:13:11.960 に答える
1
$bn_re =~ /[0-9a-z]+?\s[-0-9]+\s[\w\s]+?[<>a-z0-9]+?/i
于 2013-07-06T17:10:42.050 に答える