如果在句子中找到了精确的匹配值,我想打印出来。
if (index($sentence, $value ) != -1) { $logger->debug("DEBUG: $value found"); }我试过把^$值放进去,但它不起作用。
实际上,它是有效的,但是在要匹配的单词是句子中一个单词的子串的场景中失败了。例如:如果值是abc,脚本也会考虑单词Babc、Dabc、abcf,因为它在任何地方都能找到abc。
例如:句子是“我很高兴Babc”。脚本将在找到abc时考虑它。我希望只有当它找到准确的单词abc时,它才会进入诊断打印,这个词应该在“我很高兴的abc”中找到。
发布于 2015-06-21 05:34:37
如果您想要一个准确的单词匹配,index不是使用的合适工具。但是,您可能需要一个正则表达式,因为它是Perl、TMTOWTDI --实现它的方法不止一种。
#!/usr/bin/env perl
use strict;
use warnings;
my $value = "abc";
my @sentences = ("I am happy Babc", "I am happy abc");
print "Index method\n";
for my $sentence (@sentences)
{
print "Found [$value] in [$sentence]\n" if (index($sentence, $value) != -1);
}
print "Regex method\n";
my $rx = qr/\b\Q$value\E\b/;
for my $sentence (@sentences)
{
print "Found [$value] in [$sentence]\n" if ($sentence =~ $rx);
}当运行时,这会产生:
Index method
Found [abc] in [I am happy Babc]
Found [abc] in [I am happy abc]
Regex method
Found [abc] in [I am happy abc]这假设Perl的单词边界概念与您想要的匹配。除非你对一个词的构成有严格的要求(例如,请参阅博罗丁的评论 ),否则它至少是适度的。
请注意,这在概念上类似于MCVE (如何创建一个最小、完整和可验证的示例?)或SSCCE (简短的,完整的,正确的例子) -两个名称和相同想法的链接。由于几个原因,代码略大于最小值,但不太大(将其压缩到最小会降低代码的可读性)。
https://stackoverflow.com/questions/30961505
复制相似问题