Как я могу использовать регулярный текст для фильтрации списка черных (непристойных) слов, например, если слова из черного списка похожи на «Билл Джозеф»

 Then 'I am Bill Josephine' is valid
    but 'I am Bill Joseph.' is invalid
        'I am Bill Joseph,' is invalid
        'I am Bill Joseph ' invalid
        'I am Bill Joseph<any non alphanumeric>' is invalid.

    Similarly 'I am .Bill Joseph' is invalid
              'I am <any non alphanumeric>Bill Joseph' is invalid.
3
Rnet 26 Авг 2011 в 21:05

3 ответа

Лучший ответ

Просто, и это работает:

String badStrRegex = "\\WBill Joseph\\W?";
Pattern pattern = Pattern.compile(badStrRegex);
Matcher m = pattern.matcher(testStr);  //testStr is your string under test
boolean isBad = m.find();

Оно работает!! Протестировано против всего вашего ввода.

1
Suraj Chandran 26 Авг 2011 в 18:08

Используйте отрицание класса буквенно-цифровых символов:

"[^ A-Za-z0-9] Билл Джозеф [^ A-Za-z0-9]"

Использование «\ W» вместо «[^ A-Za-z0-9]» будет работать в большинстве случаев, за исключением случаев, когда перед / после имени стоит символ подчеркивания. Так что "Bill Joseph_" по-прежнему будет считаться действительным.

1
Harry Eakins 26 Авг 2011 в 18:17

Убедитесь, что слово окружено границей слова ".*\\b" + badWord + "\\b.*"

0
Garrett Hall 26 Авг 2011 в 17:20