过滤单词/短语上的字符串:Perl

时间:2012-05-07 23:56:07

标签: regex perl filtering

我是perl的新手,我正在寻找基本过滤关键字列表的一些帮助。简而言之,这是针对相同的单词/短语散列的字符串散列。这是为了得到最低的公分母并清理列表。

例如,该列表包括以下内容:

bat
bat boy
bat-boy
bat&boy
bat:boy
bat's
bat-boy's
batman & bat boy

它应该只匹配以下内容:

bat boy            (because of bat)
batman & bat boy   (because of bat)

正则表达式显然是要走的路,但我坚持以下因为我不能使用/ b(字边界匹配),因为一些单词包含非单词字符 - ,',&,:等

写正则表达式的最佳方法是什么?我正在检查$ keyx兑换$ keyz

这是正则表达式:

if $keyx=~m/\Q$keyz\E/

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

不太确定你之后的情况,但我猜你只想匹配整个单词,没有偏见,也没有与非字母相关的单词。实现此目的的一种方法是使用负面的环视断言:

use strict;
use warnings;
use v5.10;

for (split /, */, <DATA>) {
    say if /(?<![^ ])bat(?![^ ])/;
}

__DATA__
bat, bat boy, bat-boy, bat&boy, bat:boy, bat's, bat-boy's, batman & bat boy

<强>输出:

bat
bat boy
batman & bat boy

所以我们断言关键词周围的字符不是空格。