我有以下代码
$str = "
OTNPKT0553 04-02-03 21:43:46
M X DENY
PLNA
/*Privilege, Login Not Active*/
;";
$val = $str =~ /[
]*([\n]?[\n]+
[\n]?) ([^;^
]+)/s;
print "$1 and $2";
获取输出为
and PLNA
为什么它PLNA
作为输出获得。我认为应该从一开始就停止\n
。我认为输出应该是OTNPKT0553 04-02-03 21:43:46
您的正则表达式很杂乱,并且包含很多冗余。以下步骤演示了如何简化它,然后变得更清楚为什么匹配PLNA
。
1)在您的正则表达式中转换字面换行:
$val = $str =~ /[\n\n]*([\n]?[\n]+\n[\n]?) ([^;^\n]+)/s;
2)然后简化此代码以消除冗余:
$val = $str =~ /(\n{2}) ([^;^\n]+)/s;
因此,基本上,正则表达式正在寻找两行后跟3个空格的新行。
之前有三个空格OTNPKT0553
,但是只有一行新行,因此不会匹配。
接下来的三个空格在PLNA
IS之前加上两个新行,因此匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句