【发布时间】:2012-10-13 09:30:22
【问题描述】:
我有输入文件here(请解压)和下面的代码。就在 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;
}
编辑:理想情况下,我想在连续组(最大 50 个)中找出任何统一的字节重复模式(长度:4),其中每个组的大小可以是最大 4+30 字节和最小 4+5 字节。
例如(在每组中重复 '=>' 大小为 1 到 30 个字节):
'cs'=>'捷克语','da'=>'丹麦语','nl'=>'荷兰语','fi'=>'芬兰语','fr'=>'法语','de '=>'德语','el'=>'希腊语',
行:打印“pat=\n”;打印以下内容并挂起:
pat='克罗地亚语','cs'=>'捷克语','da'=>'丹麦语','nl'=>'荷兰语','fi'=>'芬兰语','fr'=>'法语','de'=>'德语','el'=>'希腊语','hi'=>'印地语','it'=>'意大利语','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'=>>
【问题讨论】:
-
您能用文字解释一下您希望正则表达式匹配什么等吗?
-
@martin Clayton 我已经在 EDIT 中更新了