Поиск слов, содержащих только заданные символы: регулярное выражение

#java #regex

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

Вопрос:

У меня есть набор слов. Например,

 abc, adb, acb, cab, abcc, abk, bacc
 

Я хочу найти слова, которые имеют только

азбука

итак, результат, который мне нужен, это

 abc, acb, cab, abcc, bacc
 

Мне нужно найти это с помощью регулярных выражений.

Кто-нибудь, пожалуйста, может мне помочь.

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

1. Означает ли это слово a совпадение?

2. Эй, просто мысль: может быть, вам стоит немного ознакомиться с регулярными выражениями, прежде чем обращаться за помощью?

Ответ №1:

Приведенное ниже регулярное выражение найдет все ваши слова только с символами abc внутри них.

 Pattern regex = Pattern.compile("\b[abc] \b");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    // matched text: regexMatcher.group()
    // match start: regexMatcher.start()
    // match end: regexMatcher.end()
} 
 

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

1. извините, что беспокою вас, но есть ли какой-нибудь другой способ найти такие строки вместо использования регулярных выражений? Любой алгоритм, который можно использовать для этого.

2. Что ж, если ваши входные данные представляют собой список с, вы можете использовать метод разделения, поместить их в массив слов, а затем проверить каждый элемент массива на соответствие группе символов, которые вы хотите иметь / не иметь.

3. Это хороший способ сделать это, но у меня есть некоторые большие проблемы с производительностью. Я нашел алгоритм поиска строк Бойера-Мура и несколько алгоритмов, но я не смог использовать их для этого вопроса.

4. en.wikipedia.org/wiki/… Даже имеет реализацию на C. Почему вы не смогли ими воспользоваться?

Ответ №2:

Не беспокоясь о регистре для простого примера

[a-c]

будет соответствовать любой комбинации одной или нескольких букв из a-c

[afz]

сделал бы то же самое для a, f, z

Помимо рассмотрения регистра, вы также хотели бы рассмотреть, что составляет «слово» (которому предшествуют и следуют пробелы или что-то еще)?

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

1. Поддержка регулярных выражений Java b для соответствия границе слова. (Где «слово» означает «все, что w соответствует», предположительно.)

2. Это будет соответствовать abcbla blacbla и т.д.

Ответ №3:

 \b[abc] \b
 

или

 \b[a-c] \b
 

[ и ] обозначает набор символов и означает 1 или более повторений любого символа в наборе. b является границей слова, поэтому вы будете сопоставлять только полные слова.

Пример.

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

1. Это также будет соответствовать «fooabc» или «что угодно»

2. @FailedDev да, я был в процессе редактирования, забыл об этом.