Perl正则表达式匹配在我的代码中不起作用

时间:2015-03-09 18:30:33

标签: perl design-patterns


 我有一个非常大的文件,其中包含如下行:

NO BIOMETRICS: 2000 ARIZONA/PHOENIX[1] {ARIZONA_PHOENIX_1_} AI
NO BIOMETRICS: 2090 ARIZONA/PHOENIX[2] {ARIZONA_PHOENIX_2_INTER} AB
NO BIOMETRICS: 900 TEXAS/DALLAS__1 {TEXAS_DALLAS_1_} NOCRIMINALHIST
NO BIOMETRICS: 0002 ALABAMA/HUNTSVILLE {ALABAMA/HUNTSVILLE} STATEPENITENTIARY

我只想在我的正则表达式与 ARIZONA

不匹配时才打印


我正在使用以下代码打印我正在处理的行中没有 ARIZONA 的所有情况

if($line =~ /(?!ARIZONA)/) {
 print $line,"\n";
}


但这似乎不起作用,它仍会打印出 ARIZONA 的行。

我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:6)

(?!ARIZONA)匹配,如果当前位置不是ARIZONA,那么/(?!ARIZONA)/(有效/\A(?s:.*?)(?!ARIZONA)/)匹配,如果没有跟踪任何位置按ARIZONA。所有字符串都匹配,因为字符串的结尾永远不会跟ARIZONA

您需要检查所有位置是否都跟不上ARIZONA。你要去

if ($line =~ /^(?:(?!ARIZONA).)*\z/s) {

你想要

if ($line !~ /ARIZONA/) {