Extract quoted string with Regexp::Common

为了增强电子书搜索功能,我们引入两个元字符:"。当我们想搜索一个词组(而不是单词)的时候,可以使用双引号将多个单词引起来,此时,双引号本身不作为搜索内容的一部分。当我们确实想搜索双引号时,需要写成",反斜杠取消了双引号的元字符功能。当我们想搜索本身时,就要写连续两个反斜杠。

对用户输入要分两步处理,首先,逐个取出引号引起来的部分,然后对剩下的部分分词。前一部分工作可以用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,其中还有警告双引号不匹配的功能。程序截图如下:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据