У меня есть список сайтов, которые представляют спам-ссылки:
List<String> bannedSites = ["spam1.com", "spam2.com", "spam3.com"];
Существует ли регулярный способ удаления ссылок, соответствующих этим запрещенным сайтам, из этого текста:
Dear Arezzo,
Please check out my website at spam1.com or http://www.spam1.com
or http://spam1.com or spam1 dot com to win millions of dollars in prizes.
Thank you.
Big Spammer
Обратите внимание, что ссылка может иметь несколько форматов URL, которые aioobe 's решение хорошо идентифицирует:
String input = "Dear Arezzo,\n"
+ "Please check out my website at spam1.com or http://www.spam1.com"
+ "or http://spam1.com or spam1 dot com to win millions of dollars in prizes."
+ "Thank you.";
List<String> bannedSites = Arrays.asList("spam1.com", "spam2.com", "spam3.com");
StringBuilder re = new StringBuilder();
for (String bannedSite : bannedSites) {
if (re.length() > 0)
re.append("|");
re.append(String.format("http://(www\\.)?%s\\S*|%1$s",
Pattern.quote(bannedSite)));
}
System.out.println(input.replaceAll(re.toString(), "LINK REMOVED"));
Но хотя приведенный выше код отлично работает для форматов URL spam1.com
или http://www.spam1.com
или http://spam1.com
, он пропускает несколько текстовых форматов:
Как я могу изменить регулярное выражение для целевых текстовых форматов, таких как эти?
spam1 dot com
spam1[.com]
spam1 .com
spam1 . com
Идея состоит в том, чтобы получить такой результат:
Dear Arezzo,
Please check out my website at [LINK REMOVED] or [LINK REMOVED]
or [LINK REMOVED] or [LINK REMOVED] to win millions of dollars in prizes.
Thank you.
Big Spammer
Как я заметил в комментариях ниже, мне, вероятно, не нужно запрещать всю строку spam1 dot com
. Если бы я мог стереть только часть spam1
, чтобы она стала: [LINK REMOVED] dot com
- это сделало бы эту работу.