Использование регулярных выражений java как найти конкретное слово в любом месте строки?

#java #regex #string

#java #регулярное выражение #строка

Вопрос:

Использование регулярных выражений java как найти конкретное слово в любом месте строки. Мне нужно проверить, содержит ли строка «Google» слово «gooe» или нет. Например:-

Строка: Goolge

слово для поиска: gooe

Строка «Google» содержит все символы g, o, o, e, тогда она должна возвращать true. ЕСЛИ строка — «википедия», а мое слово для поиска — «gooe», то оно должно возвращать false. Как сформировать регулярное выражение в этом сценарии ..?

Комментарии:

1. Для каждой буквы создайте позитивную прогнозную конструкцию.

2. Вы уверены, что хотите использовать регулярные выражения для этого?

3. да, я хочу использовать регулярное выражение, потому что я хочу использовать это регулярное выражение в apache nifi.

4. Будет "ego" ли «содержать» "gooe" ? т. Е. Имеет ли значение порядок и частота символов?

5. Если вы хотите использовать регулярное выражение, воспользуйтесь предложением @revo. На букву положительный прогноз. Более простым и читаемым решением было бы использовать 2 цикла

Ответ №1:

Я только что протестировал такое регулярное выражение, в котором используется «прогноз»:

 (?=^.*g)(?=^.*o)(?=^.*e)
  

Оно должно возвращать true для всех строк, содержащих g, o и e, возвращая false, если какой-либо из этих символов отсутствует.

Ответ №2:

Если вы хотите найти слово во всей строке, вы можете использовать:

  "^(?=.*e)(?=.*o.*o)(?=.*g).*"
  

Комментарии:

1. Спасибо, но это не совсем соответствует моему сценарию. Если моя строка «looge», то ваше выражение возвращает false. Но мое требование заключается в том, что оно должно возвращать true, если моя строка looge, google, elgoog и т. Д.

2. Почему оно должно возвращать true, когда ваша строка «loogle», и вы хотите найти «gooe»?

3. Спасибо, но это не совсем соответствует моему сценарию. Если моя строка «looge», то ваше выражение возвращает false. Но мое требование заключается в том, что оно должно возвращать true, если моя строка looge, google, elgoog и т. Д. Мое регулярное выражение должно проверять символы данного слова, присутствуют ли они в данной строке или нет (это может быть в любом порядке). Если оно существует, то оно должно возвращать true. слово, чтобы найти строку google, elgoog, looge, oogle для этих строк мое регулярное выражение должно возвращать true. wiki, gold, lodge, для этих строк мое регулярное выражение должно возвращать false.

4. Хорошо, теперь я вижу, вы хотите проверить, содержит ли конкретная строка все заданные символы.

5. Я изменил ответ.

Ответ №3:

Вы должны создать положительный прогноз для каждой буквы. В случае наличия gooe в качестве поискового запроса наше регулярное выражение будет:

 (?i)(?=.*g)(?=.*o)(?=.*o)(?=.*e)
  

Очевидно, что у нас есть два одинаковых взгляда. Они будут удовлетворять позиции второй o буквы, поэтому одна из них является избыточной. Вы можете удалить повторяющиеся буквы из поискового запроса перед созданием окончательного шаблона. (?i) устанавливает флаг нечувствительности к регистру.

 String term = "Gooe";   // Search term
String word = "google"; // Against word `Google`

String pattern = "(?i)(?=.*"   String.join(")(?=.*", term.split("(?!^)"))   ")";
Pattern regex = Pattern.compile(pattern);
Matcher match = regex.matcher(word);
if (match.find()) {
    // Matched
}
  

Смотрите демонстрацию здесь

Если важен порядок и при поиске двух o s, должны существовать ровно оба из них, тогда наше регулярное выражение будет:

 (?i).*?g.*?o.*?o.*?e
  

Java:

 String pattern = "(?i).*?"   String.join(".*?", term.split("(?!^)"));