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

Kor*_*ori 3 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
Run Code Online (Sandbox Code Playgroud)

我只想在我的正则表达式不匹配时打印 ARIZONA


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

if($line =~ /(?!ARIZONA)/) {
 print $line,"\n";
}
Run Code Online (Sandbox Code Playgroud)


但这似乎不起作用,它仍然打印其中的行 ARIZONA .

我究竟做错了什么?

谢谢.

ike*_*ami 6

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

您需要检查所有位置是否都没有ARIZONA.你要去的

if ($line =~ /^(?:(?!ARIZONA).)*\z/s) {
Run Code Online (Sandbox Code Playgroud)

你要

if ($line !~ /ARIZONA/) {
Run Code Online (Sandbox Code Playgroud)