Объединить конструкции регулярных выражений

Я знаю, что этот вопрос задавали раньше, однако решения, которые я нашел, не работают для меня. Я пишу простую программу, в которой один из методов принимает пользовательский ввод и проверяет, содержит ли он какие-либо символы, кроме букв (например, числа или специальные символы). Мое первое решение выглядит так:

public boolean charFinder(String inputString) {
    Pattern p = Pattern.compile("\\W", Pattern.CASE_INSENSITIVE);
    Pattern p2 = Pattern.compile("0-9", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(inputString);
    Matcher m2 = p2.matcher(inputString);

    return m.find() || m2.find();
}

И это прекрасно работает, но я хочу сделать его более элегантным. Итак, я попробовал это:

public boolean charFinder(String inputString) {
    Pattern p = Pattern.compile("\\W | \\d", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(inputString);

    return m.find();
}

И это не работает. Правильно ли я объединил регулярные выражения?

Если вы ищете что-то, что не является буквой, вы можете использовать: [^a-zA-Z] (или с опцией без учета регистра, [^a-z]). Если вам также нужно разрешить символы с диакритическими знаками, этот подход сложнее (и вам придется решить, нужны ли вам все символы с диакритическими знаками или какое-то их подмножество). Здесь есть полезная информация: reexegg.com/regex-interesting-character-classes.html

JohnLBevan 12.03.2019 22:16
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Удалите пробелы в "\\W | \\d", иначе они будут рассматриваться как часть шаблона, который вы пытаетесь сопоставить:

Pattern p = Pattern.compile("\\W|\\d", Pattern.CASE_INSENSITIVE);

Также обратите внимание, что Pattern.CASE_INSENSITIVE здесь не имеет значения, потому что \W уже нечувствителен к регистру и \d в любом случае не соответствует буквам.

@novice Рад помочь! Пожалуйста, не забудьте поставить галочку слева, чтобы принять ответ.

elixenide 12.03.2019 22:16

Все готово, приношу извинения, я не часто использую stackoverflow. Также спасибо за проверку опечаток и грамматики. Всего наилучшего!

novice 12.03.2019 22:19

Другие вопросы по теме