六月 14, 2007

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 条评论:

发表评论

指向此文章的链接:

创建链接

<< 主页