到目前为止我有什么:
这是我创建的正则表达式
if ( /PRINT\((\s*\n*\t*)[A-Z]+_[A-Z]*(_*)(DBG|NOT|UNC)/ ) { next; }
当前检测到
时会执行next
PRINT(ABC_XYZ_DBG...
PRINT(ABC_XYZ_NOT...
PRINT(ABC_UNC...
当它
时它不会执行next
PRINT(ABC_XYZ_ERR...
PRINT(ABC_XYZ_WRN...
PRINT(ABC_ERR...
我想将其更改为:
我想对其进行修改,以便除next
或_ERR
_WRN
PRINT(ABC_XYZ_ERR...
PRINT(ABC_XYZ_WRN...
PRINT(ABC_ERR...
我尝试了以下内容,但它没有匹配任何内容
my $ERR = qr/ERR/;
my $WRN = qr/WRN/;
if ( /PRINT\((\s*\n*\t*)[A-Z]+_[A-Z]*(_*)(?!$ERR|$WRN)/ ) { next; }
我在不匹配(?!$ERR)
运算符中犯了一些错误,但我不知道如何纠正它。我提前感谢您的意见。
答案 0 :(得分:1)
next unless ( /PRINT\((\s*\n*\t*)[A-Z]+_[A-Z]*(_*)(ERR|WRN)/ );
答案 1 :(得分:1)
您可以匹配(ERR|WRN)
代替(DBG|NOT|UNC)
,然后使用!
对其进行否定。
您可以使用\s*
代替\s*\t*\n*
,因为\s
匹配任何空格。
if ( ! /PRINT\((\s*)[A-Z]+_[A-Z]*(_*)(ERR|WRN)/ ) { next; }
<强>输入:强>
PRINT(ABC_XYZ_DBG...
PRINT(ABC_XYZ_NOT...
PRINT(ABC_UNC...
PRINT(ABC_XYZ_ERR...
PRINT(ABC_XYZ_WRN...
PRINT(ABC_ERR...
<强>一衬垫:强>
perl -nle 'if ( ! /PRINT\((\s*)[A-Z]+_[A-Z]*(_*)(ERR|WRN)/ ) { next; } print' input.txt
<强>输出:强>
PRINT(ABC_XYZ_ERR...
PRINT(ABC_XYZ_WRN...
PRINT(ABC_ERR...