我已经使用这个Perl正则表达式脚本了一段时间了:
open DOC1, "<", "list.txt" or die $!;
open DOC2, "> list.xls";
while (my $lines = <DOC1>) {
if ($lines =~ m/([^\s]+(([a-z0-9._%+-]+\@)|([a-zA-Z0-9]{2,15}(\.|\-|_)[a-zA-Z0-9]{2,15})))/i) {
print DOC2 lc($1), "\n";
}
}
close DOC2;
close DOC1;
它工作正常,但最近我意识到它只打印每行的第一个匹配。一旦找到匹配并打印出来,它就跳转到下一行而不进一步检查当前行。 我该如何解决这个问题?
答案 0 :(得分:0)
您想要使用g
修饰符(g表示全局,在匹配后保存您在字符串中的位置,并允许您查找多个匹配项),然后在{{中执行正则表达式1}}循环而不是while
。试试这个:
if