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,其中还有警告双引号不匹配的功能。程序截图如下:



0 条评论:
发表评论
指向此文章的链接:
创建链接
<< 主页