私の目的は、検閲を行うことです。現在、私は message.replaceAll("(?i)word", "replacement") を使用していますが、これは分割されていない単語のみをキャッチします。
これを回避するには、検閲された単語の間に別の文字を追加するだけです。
だから、「ヨロ」を探すだけで、「誰でもYOLOしたい」を「誰でもパーティーしたい」に変えたいです。「.」を保持する そこにボーナスがあります。
どうですか:(「単語」を「置換」に置き換えるには)
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 がスキップされるため、(単語境界)を削除しました。