“全部替换”与“分配新值”完全相同。所以,你不需要更换运营商(的///“),当简单的比赛应该足够了:
my $var = 'This apple is white';
if ($var !~ /\bapple\b/i) {
$var = 'No apples for you!';
}
我变了一个正则表达式位:加/i
修改,使得图案不区分大小写(以捕捉'苹果'和'苹果';我想这就是为什么在原始文章中是'pple'),并用\b
(以防止匹配'Applegate'和'菠萝')包装单词。
更新:我认为这是最明显的解决方案,但在技术上仍然有可能不if
做到:
$var =~ s/^(?!.*\bapple\b.*).*$/No apples for you/i;
这里有一个简单的测试:
use 5.010;
use warnings;
use strict;
my @fruit_strings = (
'This apple is white',
'This pineapple is violet',
'This Apple is a company',
'This pear is green');
for (@fruit_strings) {
s/^(?!.*\bapple\b.*).*$/No apples for you/i;
say;
}
需要注意的是,如果你的字符串是多,您必须将/m
修饰符添加到正则表达式。
另外我会建议阅读这两个教程 - Perl regular expressions quick start和Perl regular expressions。
你可以用'!〜'为这 – gaussblurinc
@loldop这就是答案:p – MattLBeck
@Mattrition是啊,我知道,但它是简短的答案,我没有足够的时间来讲述好的书,我建议初学者和好的网站和其他的东西。我只是发现他〜'' - 另一个Perl的美丽和神秘;) – gaussblurinc