7

ユーザー入力のキーワードのスパムを検出するための正規表現を取得しようとしています。通常、最初に通常のテキストがあり、最後にキーワード spam があり、コンマまたはその他の文字で区切られています。

私が必要とするのは、キーワードの数を数えて、人間がチェックできるようにテキストにフラグを立てるための正規表現です。

テキストは通常​​次のようになります。

[random text, with commas, dots and all]

keyword1, keyword2, keyword3, keyword4, keyword5,
Keyword6, keyword7, keyword8...

一致をカウントするためにいくつかの正規表現を試しました:

-これは2つのキーワードのうち1つだけを取得します

[,-](\w|\s)+[,-]

-これもランダムテキストに一致します

(?:([^,-]*)(?:[^,-]|$))

誰でもこれを行うための正規表現を教えてもらえますか? または、別のアプローチを取る必要がありますか?

ありがとう!

4

6 に答える 6

13

私の質問への回答をお寄せください。これは、2 つのコンマの間にある文字列に一致する正規表現です。

(?<=,)[^,]+(?=,)

この正規表現は区切りのコンマと一致しないため、コンマを消費しません。この正規表現は、前の文の「したがって消費しない」に一致します。

正規表現が一致してコンマを消費したという事実が、試みた正規表現が他のすべての候補とのみ一致した理由です。

また、入力全体が単一の文字列の場合は、改行を防止する必要があります。その場合は、使用する必要があります。

(?<=,)[^,\n]+(?=,)

http://www.phpliveregex.com/p/1DJ

于 2013-10-22T08:44:35.143 に答える
1

単に爆発とトリムを使用しないのはなぜですか?

$keywords = array_map ('trim', explode (',', $keywordstring));

次に、$keywords で count() を実行します。

スペースを含むキーワードがスパムであると思われる場合は、$keywords 配列を反復処理して、空白を含むものを探すことができます。ただし、キーワードにスペースを含める正当な理由がある場合があります。たとえば、システム上のスーパーヒーローについて話している場合、誰かがThe TickorIron Manをキーワードとして入力する可能性があります

ただし、キーワードを数えたり、キーワード内のスペースを探したりすることは、スパムを検出するための非常に優れた戦略だとは思いません。代わりに、他のボット保護戦略を調べたり、手動モデレーションを使用したりすることもできます.

于 2013-10-22T08:25:05.187 に答える
0

あなたの最初の正規表現は前のコンマを必要としません

[\w\s]+[,-]
于 2013-10-22T08:26:28.060 に答える
0

2021 年になっても人々がこれを検索する場合

([^,\n])+

改行とコンマ以外のすべてに一致 regexr.com/60eme

于 2021-06-21T22:05:13.950 に答える
-2

難しいのは、ランダム テキストにコンマを含めることもできることだと思います。

キーワードがすべて 1 行にあり、それがテキスト全体の最後の行である場合は、テキスト全体をトリムして、末尾から改行文字を削除します。次に、最後の改行文字から最後までのテキストを取得します。これは、キーワードを含む文字列である必要があります。この部分を特定したら、カンマで文字列を分解して、その部分を数えることができます。

<?php
$string = " some gibberish, some more gibberish, and random text

keyword1, keyword2, keyword3

";

$lastEOL = strrpos(trim($string), PHP_EOL);
$keywordLine = substr($string, $lastEOL);
$keywords = explode(',', $keywordLine);

echo "Number of keywords: " . count($keywords);

正規表現ではないことはわかっていますが、それでも役立つことを願っています。

解決策を見つける唯一の方法は、ランダムなテキストとキーワードに存在しないキーワードを分離するものを見つけることです。キーワードに改行がある場合は使用できません。でも改行2連続か?または他の文字。

$string = " some gibberish, some more gibberish, and random text

keyword1, keyword2, keyword3,
keyword4, keyword5, keyword6,
keyword7, keyword8, keyword9

";

$lastEOL = strrpos(trim($string), PHP_EOL . PHP_EOL); // 2 end of lines after random text
$keywordLine = substr($string, $lastEOL);
$keywords = explode(',', $keywordLine);

echo "Number of keywords: " . count($keywords);

(編集:より多くの新しい行の例を追加-ロングショット)

于 2013-10-22T08:25:28.683 に答える