我的目标是进行审查。目前 atm 我使用 message.replaceAll("(?i)word", "replacement") 但这只会捕获未拆分的单词。
要绕过这个人们只需在被审查的词之间添加一个不同的字符。
所以我想让“任何人都想参加 YOLO”变成“任何人都想参加派对”,而只是在寻找“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]
is not a letter
[^A-Za-z]?
不是字母(可选)
$1
是括号中的第一件事(first ([^A-Za-z])
)
$2
是括号中的第一件事(last ([^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 将被跳过。