【问题标题】:Perl regex matching is not working in my codePerl 正则表达式匹配在我的代码中不起作用
【发布时间】:2015-03-09 18:30:33
【问题描述】:


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

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 的行。

我做错了什么?

谢谢。

【问题讨论】:

  • 随便if ( $line !~ /ARIZONA/ )

标签: perl design-patterns


【解决方案1】:

(?!ARIZONA) 匹配如果当前位置后面没有ARIZONA,所以/(?!ARIZONA)/(实际上是/\A(?s:.*?)(?!ARIZONA)/)匹配任何位置后面没有ARIZONA。所有字符串都匹配,因为字符串末尾永远不会跟着ARIZONA

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

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

你想要

if ($line !~ /ARIZONA/) {

【讨论】:

  • 你的澄清更好:-)
猜你喜欢
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
相关资源
最近更新 更多