Perl正则表达式否定

时间:2013-11-26 23:05:07

标签: regex perl regex-negation

如何否定此正则表达式(不使用!~)?

my $Line='pqr_abc_def_ghi_xyz';

if ($Line=~/(?:abc|def|ghi)/)
{
   printf("abc|def|ghi is not present\n");
}
else
{
   printf("abc|def|ghi is present\n");
}

注意:abc,def或ghi可以在字符串

之前或之后

3 个答案:

答案 0 :(得分:5)

if ( $Line =~ /^(?!.*(?:abc|def|ghi))/s ) {

即,在字符串开头之后的任何地方都无法匹配该模式。

答案 1 :(得分:2)

另一种方法是,这可以让您更好地控制单个组件子串

 #  (?s)^(?:(?:(?!abc|def|ghi).)+|)$

 (?s)
 ^ 
 (?:
      (?:
           (?!
                abc
             |  def
             |  ghi 
           )
           . 
      )+
   |  
 )
 $

答案 2 :(得分:1)

另一种选择可能是使用unless代替if

unless ($Line=~/(?:abc|def|ghi)/){printf("abc|def|ghi is not present\n");}
else                         {printf("abc|def|ghi is present\n");}