-2

私の目的は、検閲を行うことです。現在、私は message.replaceAll("(?i)word", "replacement") を使用していますが、これは分割されていない単語のみをキャッチします。

これを回避するには、検閲された単語の間に別の文字を追加するだけです。

だから、「ヨロ」を探すだけで、「誰でもYOLOしたい」を「誰でもパーティーしたい」に変えたいです。「.」を保持する そこにボーナスがあります。

4

1 に答える 1

3

どうですか:(「単語」を「置換」に置き換えるには)

msg.replaceAll("(?i)([^A-Za-z])w[^A-Za-z]?o[^A-Za-z]?r[^A-Za-z]?d([^A-Za-z])",
               "$1replacement$2") );

[^A-Za-z]は文字
[^A-Za-z]?ではありません は文字ではありません (オプション)
$1は括弧内の最初のもの (first ([^A-Za-z]))
$2は括弧内の最初のもの (最後([^A-Za-z]))です

代替手段はルックアラウンドです:

msg.replaceAll("(?i)(?<=[^A-Za-z])w[^A-Za-z]?o[^A-Za-z]?r[^A-Za-z]?d(?=[^A-Za-z])",
               "replacement") );

上記の単語を指定して自動的に生成することは難しくありません。

インターネットに投稿されたので、誰もがそれを見て、スパムを上記に拾われないように変更できます.

参照

編集:\\b 1word2 がスキップされるため、(単語境界)を削除しました。

于 2013-04-08T08:45:59.800 に答える