正则表达式数字取非怎么处理?
有一部分数据如下,我想将其中第二个字段不是12的数据给删除,正则表达式是 s/^\d+,[^1][^2],.*//g 满足不了我的需求,请问一下如何写能将非12的全部替换?
123123131,12,http://www.baidu.com
123123132,13,http://www.baidu.com
123123133,01,http://www.baidu.com
123123135,02,http://www.baidu.com
123123134,04,http://www.baidu.com
123123136,08,http://www.baidu.com
123123137,22,http://www.baidu.com
[解决办法]
参考下这个吧
http://blog.csdn.net/jasonhwang/article/details/2333519
[解决办法]
s/^\d+,([1][^2]|[^1][0-9]),.*\n//gm;
[解决办法]
while(<DATA>){
/^\d+,(\d+),/;
if($1==12){print $_;}
}
__DATA__
123123131,12,http://www.baidu.com
123123132,13,http://www.baidu.com
123123133,01,http://www.baidu.com
123123135,02,http://www.baidu.com
123123134,04,http://www.baidu.com
123123136,08,http://www.baidu.com
123123137,22,http://www.baidu.com
[解决办法]
哦,3楼的还有一点问题:就是如果是最后一行,那么\n得不到匹配。修改了一下,如下
#!/usr/bin/perluse 5.014;my $input = '123123131,12,http://www.baidu.com123123132,13,http://www.baidu.com123123133,01,http://www.baidu.com123123135,02,http://www.baidu.com723123135,12,http://www.baidu.com123123134,04,http://www.baidu.com123123136,08,http://www.baidu.com123123137,15,http://www.baidu.com';my $result = ($input =~ s/ ^\d+ #123123123数字串匹配 ,([1][^2]|[^1][0-9]), #匹配非,12,的字符串 .* #匹配http字符串 (\n)? #末尾的换行符需要匹配,但最后一行没有换行符,所以换行符可能不存在(不然最后那行不能删除) //gmrx); #g全局替换,m多行替换,r返回值放入$result, x忽略空格say $input;say '--------------------------------------';say $result;