RegExp для цензуры кириллицы

Я внедряю фильтр для русских ругательств, и моя голова взорвется. Есть ли регулярное выражение для сопоставления всех символов кириллицы в слове, кроме первого и последнего? \\B\\w\\B не работает на кириллице. RegExp будет использоваться в replaceAll(). [ёа-я]+ хорошо подходит для сопоставления русских слов, но мне все еще нужно исключить первый и последний символы.

Тестовый ввод: ОченьПлохоеСлово

Вывод: О**************о

Почему бы вам не получить список русских ругательств, а затем создать троичное дерево? Без него невозможно осуществить запрет на матерные слова. Составьте список всех возможных перестановок, а затем дайте мне список, чтобы сделать полноценную попытку. Или вы можете сделать это сами.

sln 02.04.2023 02:35
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать это выражение:

(?<=[а-яА-ЯёЁ])[а-яА-ЯёЁ](?=[а-яА-ЯёЁ])

с заменой *, чтобы преобразовать ОченьПлохоеСлово и ещё, 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 01.04.2023 23:24

@Pshemo, да, мы можем, но это заменит любые другие буквы в слове to. Но я так понимаю, что автор хочет заменить только буквы кириллицы.

markalex 01.04.2023 23:45

Верно, но в случае, если слово, которое OP хочет подвергнуть цензуре, содержит только буквы кириллицы, о решении с флагом Unicode также может быть полезно узнать (что было точкой моего комментария, я никогда не утверждал, что ваш ответ был каким-либо образом неправильным).

Pshemo 02.04.2023 09:24

Другие вопросы по теме

Как я могу удалить все ненужные пробелы в строке, но сохранить такие символы, как «\ n»?
Регулярное выражение для формата ДДД:ЧЧ:ММ в SQL
Как обеспечить правильную замену слов в Документах Google с помощью скрипта Google Apps
Регулярное выражение для сопоставления вторых повторяющихся слов в строке с использованием R
Регулярное выражение совпадает, но сценарий неожиданно завершается ошибкой?
PostgreSQL — как найти специальные символы, пробелы, дополнительные вкладки и возврат каретки в текстовых полях?
Python Regex для извлечения текста между числами
Регулярное выражение для соответствия либо az, либо 0-9 в любом порядке любой длины или точной строки N/A
Регулярное выражение для соответствия цифрам 0-9 любой длины или точной строке Н/Д
Как разделить строку между запятыми, одним или несколькими пробелами и между цифрами и буквами, но не между точками с регулярным выражением в java?