Regex - получить бесподобную позицию regex - PullRequest
0 голосов
/ 20 апреля 2020

Я ищу обобщенный c код, который даст мне непревзойденную позицию входной строки.

public static boolean patternMatch(final String patternToMatch, final String valueToMatch){
        if (null == patternToMatch || null == valueToMatch){
            LOGGER.debug(String.format("Either patternToMatch(%s) or valueToMatch(%s) is null",patternToMatch,valueToMatch));
        }

        Pattern pattern = Pattern.compile(patternToMatch);
        final Matcher matcher = pattern.matcher(valueToMatch);
        return matcher.matches();
    }

Это код с заданным регулярным выражением и значением, проверяет, соответствует ли значение регулярному выражению , Если он не совпадает, то нужно выдать исключение, сказав, что «совпадение не выполнено в позиции <>».

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

Спасибо

1 Ответ

0 голосов
/ 20 апреля 2020

Вы звоните matcher.matches(), который соответствует всей строке темы, поэтому не существует ни одной части, которая не соответствует всей целевой строке, не совпадает, и когда она соответствует, вся целевая строка соответствует, и я хочу, чтобы вы могли получить совпавшее значение.

Как вы спросили в комментарии как получить совпавшее значение? для этой цели вы можете вызвать matcher.group() после вызова mathcer.matches(), но как matches() метод соответствует всей строке, поэтому matches.group() вернет вам всю строку и, если она не будет соответствовать, вызовет исключение.

, если вы хотите сопоставить часть регулярного выражения, которую вам нужно будет использовать * Если метод 1012 *, то group () вернет только совпадающую часть.

ex

String s = "this is a cat";
        Matcher m = Pattern.compile("\\bcat\\b").matcher(s);
        m.find();
        System.out.println(m.group());

, приведенный выше, код печатает "cat", потому что cat является совпадающей частью, но если вы используете m.matches(), а затем пытаетесь позвонить m.grounp(), я брошу Exception in thread "main" java.lang.IllegalStateException: No match found и целую строку, если математика.

Хорошего дня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...