0

我是 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/

任何帮助,将不胜感激

4

1 回答 1

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

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

于 2012-05-08T00:28:05.177 回答