为了增强电子书搜索功能,我们引入两个元字符:和
"
。当我们想搜索一个词组(而不是单词)的时候,可以使用双引号将多个单词引起来,此时,双引号本身不作为搜索内容的一部分。当我们确实想搜索双引号时,需要写成"
,反斜杠取消了双引号的元字符功能。当我们想搜索本身时,就要写连续两个反斜杠。
对用户输入要分两步处理,首先,逐个取出引号引起来的部分,然后对剩下的部分分词。前一部分工作可以用Regexp::Common来完成:
my @quoted_string; while ($search_string =~ s/$RE{delimited}{-delim=>q{"}}{-keep}//) { push @quoted_string, escape_special_char($3); } sub escape_special_char { my $string = shift; $string =~ s/\([\"])/$1/g; return $string; }
其中$3
是指被引号引起来的部分(不包含两边的引号),而escape_special_char
将"
替换为"
,将\
替换为。完整源程序参见这里,版本号为1,其中还有警告双引号不匹配的功能。程序截图如下: