我有一个非常大的文件,其中包含如下代码行:
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的行。
我做错了什么?
谢谢。
发布于 2015-03-10 02:35:26
如果当前位置后面不跟ARIZONA,则匹配(?!ARIZONA);如果任何位置后面不跟ARIZONA,则匹配/(?!ARIZONA)/ (实际上是/\A(?s:.*?)(?!ARIZONA)/)。所有字符串都匹配,因为字符串的末尾永远不会跟ARIZONA。
你需要检查所有的位置后面都没有跟上ARIZONA。你想要的是
if ($line =~ /^(?:(?!ARIZONA).)*\z/s) {你想要的
if ($line !~ /ARIZONA/) {https://stackoverflow.com/questions/28949282
复制相似问题