Я внедряю фильтр для русских ругательств, и моя голова взорвется. Есть ли регулярное выражение для сопоставления всех символов кириллицы в слове, кроме первого и последнего? \\B\\w\\B
не работает на кириллице. RegExp будет использоваться в replaceAll()
. [ёа-я]+
хорошо подходит для сопоставления русских слов, но мне все еще нужно исключить первый и последний символы.
Тестовый ввод: ОченьПлохоеСлово
Вывод: О**************о
Почему бы вам не получить список русских ругательств, а затем создать троичное дерево? Без него невозможно осуществить запрет на матерные слова. Составьте список всех возможных перестановок, а затем дайте мне список, чтобы сделать полноценную попытку. Или вы можете сделать это сами.
Вы можете использовать это выражение:
(?<=[а-яА-ЯёЁ])[а-яА-ЯёЁ](?=[а-яА-ЯёЁ])
с заменой *
, чтобы преобразовать ОченьПлохоеСлово и ещё, but this is good word
-> О**************о и е*ё, but this is good word
.
Здесь:
(?<=[а-яА-ЯёЁ])
соответствует, если основному шаблону предшествует буква кириллицы,[а-яА-ЯёЁ]
- основной узор: любая кириллическая буква(?=[а-яА-ЯёЁ])
соответствует, если за основным шаблоном следует кириллическая буква.Очень простой пример сопоставления с regex101.
Мы также можем включить Pattern.UNICODE_CHARACTER_CLASS через (?U)
лайк System.out.println("ОченьПлохоеСлово".replaceAll("(?U)\\B\\w\\B","*"));
@Pshemo, да, мы можем, но это заменит любые другие буквы в слове to. Но я так понимаю, что автор хочет заменить только буквы кириллицы.
Верно, но в случае, если слово, которое OP хочет подвергнуть цензуре, содержит только буквы кириллицы, о решении с флагом Unicode также может быть полезно узнать (что было точкой моего комментария, я никогда не утверждал, что ваш ответ был каким-либо образом неправильным).