Я предлагаю вам эту версию строки регулярного выражения вместе с кодом:
String string = bufferedReader.readLine();
String regex = "^[gG]([o0O]|\\(\\)|\\[\\]|\\{\\}|\\<\\>){2}[gG][lLI][eE3]";
String result = Pattern.matches(regex, string) ? "True" : "False";
System.out.println(result);
Поскольку это поиск «одним выстрелом», вы можете использовать статический метод «совпадения» класса Pattern.То есть, запишите результат непосредственно из одноразового матча с вашим регулярным выражением.
Регулярное выражение в основном совпадает с тем, которое вы разработали, но некоторые моменты стоит отметить.
Этоопасно (если не ошибочно) использовать нечувствительность к регистру, когда ваше регулярное выражение пытается подобрать буквы другого регистра.Если вы хотите выполнить сопоставление классическим способом, избегайте использования флага нечувствительности к регистру.(в данном конкретном случае он будет соответствовать «google», написанному строчными буквами «i» вместо «L», что приведет к ложным срабатываниям).
Поскольку существует только один способ выразить«o», лучше сгруппировать его определение в одно подвыражение, а затем использовать квантификатор «{2}», чтобы сказать, что вы точно хотите, чтобы два экземпляра этого подвыражения совпадали.
Вы хотитечтобы найти два вхождения EITHER
- в нижнем / верхнем регистре "o"
- ноль
- a пара норма / квадрат/ фигурные / угловые скобки
И последнее, но не менее важное: если вы ищете простые, квадратные, фигурные или угловые скобки, вы должны избегать их, потому что это специальные символы врегулярное выражение.Кроме того, вы должны избежать их путем Java, используя двойную черную черту.
Вот полный код:
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String string = bufferedReader.readLine();
String regex = "^[gG]([o0O]|\\(\\)|\\[\\]|\\{\\}|\\<\\>){2}[gG][lLI][eE3]";
String result = Pattern.matches(regex, string) ? "True" : "False";
System.out.println(result);
bufferedReader.close();
}
Он печатает «True» при подаче с помощью ввода «g ()() GI3"