Помогите с регулярным выражением Java
Помогите реализовать регулярное выражение, которое будет выделять слова, в которых первые три буквы согласные. Не могу никак подобрать грамотное выражение.
Вот код всего проекта.
package ua.lviv.iot;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WordReplacer {
public static String replaceWrongWords(String text, String changeStr) {
Pattern pattern = Pattern.compile("\\b\b[^aeyuioAEYUIO 1-9]{3}\\b",
Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
text = matcher.replaceAll(changeStr);
return text;
}
}
package ua.lviv.iot;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Scanner;
import org.junit.Test;
public class WordReplacerTest {
@Test
public void replaceWrongWordsTest() {
String text = "throw word test";
InputStream in = new ByteArrayInputStream(text.getBytes());
System.setIn(in);
Scanner scanner = new Scanner(System.in);
text = scanner.nextLine();
scanner.close();
String expected = "WRONG word test";
String actual = WordReplacer.replaceWrongWords(text, "WRONG");
assertEquals(expected, actual);
}
}
Ответы (2 шт):
Автор решения: StateItPrimitive
→ Ссылка
Рабочий вариант регулярного выражения может выглядеть следующим образом:
(?i)\b[BCDFGHJKLMNPQRSTVWXYZ]{3}\w*
Пример использования в рамках Java кода:
public class Example {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("(?i)(\\b[BCDFGHJKLMNPQRSTVWXYZ]{3}\\w*)");
Matcher matcher = pattern.matcher("abc bcd fghSome some pRqAbC XYZabc ZYabc");
while (matcher.find()) {
System.out.println(matcher.group(1));
}
}
}
Примечание: оставил явный ответ, чтобы людям не приходилось копаться в комментариях к вопросу.