Как проверить, начинается ли слово с пробела или подчеркивания или это начало строки / строки в java? - PullRequest
2 голосов
/ 01 августа 2020

Мне нужно проверить строку на наличие c определенного слова. Условие таково: он начинается и заканчивается пробелом или подчеркиванием, либо это начало или конец строки. Регистр нечувствителен.

Ниже мой код:

package example;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String test = "The starting of  week";
        String t = "[^_ ]the[ _$]";
        Pattern p = Pattern.compile(t,Pattern.CASE_INSENSITIVE);
        Matcher matcher = p.matcher(test);
        if( matcher.find() ){
            System.out.println(true);  

        }
    }
}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Используйте

(?mi)(?<=^|[_ ])the(?=[_ ]|$)

См. proof . Если вы хотите обрабатывать какие-либо пробелы, замените пробел в классе символов на \s.

Обратите внимание на часть (?mi), m включает режим распознавания строки для якорей, а i делает совпадение нечувствительным к регистру.

0 голосов
/ 01 августа 2020

Проблема в том, что [^ abc] - это синтаксис, соответствующий чему угодно, кроме символов 'a', 'b' или 'c'. Вам нужно будет изменить свой шаблон на что-то вроде:

String t = "(^|[_ ])the[ _$]";

Обратите внимание, что экранирование символа '^' не работает:

String t = "[\\^_ ]the[ _$]";

Так как это будет интерпретироваться как буквальный символ '^', а не начало ввода.

РЕДАКТИРОВАТЬ: кстати, такая же проблема существует с символом '$', поэтому вам потребуется:

String t = "(^|[_ ])the([ _]|$)";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...