2015-04-17 2 views
0

Я хотел бы знать, как цензурировать слово «задница» (или слово) с помощью Java Regex очень безопасно.Как цензурить СПЕЦИФИЧЕСКОЕ слово в Java с помощью Regex

Это усложняет ситуацию, поскольку слово А может содержаться во многих других безобидных словах. Например, «трава».

У меня есть частично часть начала для множества префиксов слова А, но не может найти, как подвергнуть цензуре слово без цензуры суффиксов типа «убийца».

Это очень сложно, и я до сих пор не могу найти решение.

+2

"The слово"? Это проблема [известного] (http://en.wikipedia.org/wiki/Scunthorpe_problem). Вы можете подвергать его цензуре только тогда, когда это слово. У вас есть еще одна проблема: ваше непослушное слово имеет другое [совершенно невинный смысл] (http://en.wikipedia.org/wiki/Donkey). – Blorgbeard

+1

Это, безусловно, проблема с clbuttic. – chrylis

ответ

2

С ИСПОЛЬЗОВАНИЕМ LOOKAROUNDS

(?<=\s)(?:ass)(?=\s) 

проверит пробела или переносы вокруг слова. Если вы хотите, чтобы слово быть подвергнуто цензура даже в окружении небуквенных символов (:ass:), используйте:

(?<=\W)(?:ass)(?=\W) 

Если вы ищете регистронезависимый поиск, добавьте (?i) в самоге начала.

используя слова ГРАНИЦЫ

Кто-то в комментариях предложил лучший путь:

\b(?:ass)\b 

Или для специальных символов:

\b([&#"'-_$^])?(?:ass)([&#"'-_$^])?\b 
+1

Почему бы просто не использовать [границу] (https://docs.oracle.com/javase/tutorial/essential/regex/bounds.html) для слов, что означает '\ b'? – ajp15243

+0

Это действительно лучшее решение. Я не привык использовать '\ b'. Это просто заменит оба вида? – Docteur

+1

Да, как и в примере в документах, которые я связал, вы просто делаете '\ bword \ b', чтобы искать это слово. Поэтому в их примере '\ bdog \ b' найдет' собаку' в предложении, но пропустит 'doggie'. – ajp15243

Смежные вопросы