如何否定此正则表达式(不使用!~
)?
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可以在字符串
之前或之后答案 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");}