my $var1=<<EO_STR;
abc,./()éà haha
hihi
hoho
EO_STR
my $var2=<<EO_STR;
abc,./()éà haha
hihi
**TOTO**
hoho
EO_STR
我有两个变量VAR1和VAR2,其中包含一个字符串,其中包含标点符号,特殊字符...,我想应用一个仅与变量的所有内容匹配的正则表达式TOTO,如果字符串包含TOTO,则不要在$ 1中返回任何内容给我,否则将变量中的所有文本返回到$ 1中。
这意味着如果我在$ var1上应用正则表达式,它将返回文本:“ abc,。/()éàhaha 嗨 hoho“在$ 1中,如果我在$ var2上应用相同的正则表达式,它将在$ 1中不返回任何内容,因为$ var2包含TOTO
我尝试过,但是不起作用:
$VAR1=~/((?!TOTO).)*/;
print $1."\n\n";
$VAR2=~/((?!TOTO).)*/;
print $1."\n\n";
他在$ 1中什么也没回报……
答案 0 :(得分:5)
答案 1 :(得分:2)
我认为您应该简化逻辑:
\b
TOTO
\b
!~
来应用正则表达式#!/usr/bin/perl
use strict;
use warnings;
my $var1=<<EO_STR;
abc,./()éà haha
hihi
hoho
EO_STR
my $var2=<<EO_STR;
abc,./()éà haha
hihi
**TOTO**
hoho
EO_STR
foreach my $var ($var1, $var2) {
if ($var !~ /\bTOTO\b/) {
print "TOTO NOT FOUND; $var\n";
} else {
print "TOTO FOUND: $var\n";
}
}
exit 0;
当然,如果您喜欢常规匹配运算符=~
,则可以简单地反转逻辑:
if ($var =~ /\bTOTO\b/) {
print "TOTO FOUND; $var\n";
} else {
print "TOTO NOT FOUND: $var\n";
}
输出:
$ perl dummy.pl
TOTO NOT FOUND;
abc,./()éà haha
...
hoho
...
TOTO FOUND:
abc,./()éà haha
...
**TOTO**
...
答案 2 :(得分:2)
还可以使用运算符!〜,可以尝试以下代码:
print $var1 . "\n\n" if ( $var1 !~ /TOTO/ );