ここに入力ファイル(解凍してください) と以下のコードがあります。print "pat=\n"; の直後。Windows タスク マネージャー Perl(v5.010000) で 25% の CPU 時間を使用しているのを確認しながら、パターン マッチでハングします。
use strict;
open FP, "<default.php" or die "can't read";
$/ = undef;
my $content = <FP>;
while ( $content =~ /(['"])([^\s\x00-\x1f]{300,})\1/gs ) {
#looks like we've found base encoded string etc
my $subpat = $2;
print "pat=<$subpat>\n";
if ( $subpat =~ m#(?:(....).{5,30}(?=\1)){50}#s ) {
print "hello world";
} else {
die("");
}
exit;
}
編集: 理想的には、各グループのサイズが最大 4 + 30 バイト、最小 4 + 5 バイトである連続したグループ (最大 50) 内のバイト (長さ:4) の均一な繰り返しパターンを把握したいものです。
例 (サイズが 1 から 30 バイトの各グループで「=>」を繰り返す):
'cs'=>'チェコ語','da'=>'デンマーク語','nl'=>'オランダ語','fi'=>'フィンランド語','fr'=>'フランス語','de'=> 'ドイツ語','el'=>'ギリシャ語',
行: print "pat=\n"; 以下を出力してハングします。
pat=<,'hr'=>'クロアチア語','cs'=>'チェコ語','da'=>'デンマーク語','nl'=>'オランダ語','fi'=>'フィンランド語',' fr'=>'French','de'=>'German','el'=>'Greek','hi'=>'Hindi','it'=>'Italian','ja'=>'日本語','ko'=>'韓国語','no'=>'ノルウェー語','pl'=>'ポーランド語','pt'=>'ポルトガル語','ro'=>'ルーマニア語','ru '=>'ロシア語','es'=>'スペイン語','sv'=>'スウェーデン語','ca'=>'カタロニア語','tl'=>'フィリピン語','iw'=>'ヘブライ語','id'=>'インドネシア語','lv'=>'ラトビア語','lt'=>'リトアニア語','sr'=>'セルビア語','sk'=>'スロバキア語','sl'=>'スロベニア語','uk'=>'ウクライナ語','vi'=>'ベトナム語' ,'sq'=>'アルバニア語','et'=>'エストニア語','gl'=>'ガリシア語','hu'=>'ハンガリー語','mt'=>'マルタ語','th'= >'タイ語','tr'=>'トルコ語','fa'=>'ペルシャ語','af'=>'アフリカーンス語','ms'=>'マレー語','sw'=>'スワヒリ語', 'ga'=>'アイルランド語','cy'=>'ウェールズ語','be'=>'ベラルーシ語','is'=>'アイスランド語','mk'=>'マケドニア語','yi'=> 'イディッシュ語','hy'=>'アルメニア語','az'=>'アゼルバイジャン語','eu'=>'バスク語','ka'=>'グルジア語','ht'=>>