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 に答える