Perl如何匹配<IP模式并删除多行字符串中的对应整行
Perl 多行字符串删除包含<IP的整行解决方案
问题原因
你写的正则s/<IP.*//存在三个核心问题:
- 未开启多行匹配模式,无法精准匹配每行开头的
<IP - 未匹配行尾的换行符,只会清空
<IP到行尾的内容,不会删除整行本身 - 默认只匹配第一次出现的符合规则的内容,不会处理所有匹配行
解决方案
使用带修饰符的正则替换即可直接在字符串内完成操作,无需读写文件:
my $str = "IP 5002 <IP 5002 < abcbbdbdbd abcbbdbdbd abcbbdbdbd abcbbdbdbd ; "; # 核心替换逻辑 $str =~ s/^<IP.*\n?//gm; print "\n" . $str . "\n";
修饰符说明
g:全局匹配,删除所有符合规则的行,而非仅删除第一个匹配项m:开启多行模式,让^可以匹配每一行的开头,而非仅匹配整个字符串的开头\n?:匹配行尾的换行符,可选标记是为了兼容最后一行是<IP开头且无末尾换行的场景
内容的提问来源于stack exchange,提问作者HassJ
相关产品推荐
相关产品推荐

