正则表达式前瞻和/或后视错误

时间:2011-07-07 09:39:16

标签: perl regex-lookarounds

$ line ='鲍勃从未说过每一个遐想都很好';

寻找:匹配并捕获“永远”这个词。使用前瞻和/或外观断言来做到这一点。

if ( $line =~ /(?<=\s)ever(?=\s)/) {
 print "matched ";
}

替换:使用您想要的任何机制从行中删除“ever”和后面的空格。

$line =~ s/ever\s+//;
print $line ;

额外信用:使用您喜欢的任何机制将字符偏移量添加到单词“ever”的字符串中。

my $result = index($line,'ever');
print $result;

我写了考试。但我没有通过。这些答案有什么问题?

1 个答案:

答案 0 :(得分:4)

  1. “匹配并捕获”。 /(小于?= \ S)(曾经)(= \ S')/
  2. $ line = ~s / ever \ s + //不会删除 word “ever”,它会从“never”中删除“ever”。 “\ b”应该在这里使用。
  3. 与2相同,会在“never”中找到“ever”,因此您应该搜索“ever”而添加1(因为添加空格)。如果您认为字符串中的第一个字符偏移量为1,则可以添加另一个。