Как работает java .util.regex.Matcher :: useAnchoringBounds? - PullRequest
2 голосов
/ 13 апреля 2020

Я пытался использовать функциональность Matcher "useAnchoringBounds". Но я не вижу никакого эффекта от установки его значения по умолчанию «true» в значение «false».

Javado c метода Matcher «useAnchoringBounds» говорит:

[…] Без границ привязки границы области этого сопоставителя не будут совпадать с якорями, такими как ^ и $. […]

Matcher matcher = Pattern.compile("^a$").matcher("a");
matcher.useAnchoringBounds(false);
System.out.println(matcher.find() + " " + matcher.group());// true a

Matcher matcher = Pattern.compile("^a$").matcher("ab");
matcher.useAnchoringBounds(false);
System.out.println(matcher.find());// false

В обоих примерах параметр «useAnchoringBounds» не влияет на результат матча. Как настройка useAnchoringBounds влияет на соответствие?

Объясняющий пример

Matcher anchoringBounds = Pattern.compile("^a$").matcher("xax");
    anchoringBounds.region(1, 2);// sub region is: "a"
    assert anchoringBounds.find();// sub region is treated like a complete input by default
    anchoringBounds.useAnchoringBounds(false);// Now treat the region as incomplete part of the whole input
    assert !anchoringBounds.find();// "a" is no longer considered at the beginning of line ^

1 Ответ

2 голосов
/ 13 апреля 2020

Ключевое слово в определении этого метода - «регион».

Область - часть полной строки, которую вы можете определить. Например:

Matcher matcher = Pattern.compile("^a$").matcher("xxxayyy");
matcher.region(3, 4);
matcher.useAnchoringBounds(false);
System.out.println("find=" + matcher.find());

В этом случае мы определяем регион как «a» внутри «xxxayyy». Теперь, должен ли сопоставитель рассматривать границы этой области как границы привязки или нет?

В стандартном true это так же, как если бы вы установили строку сопоставителя равной просто "a", и шаблон будет быть сопоставленным.

Но если вы установите false, оно не будет соответствовать привязанному a. Он рассматривает регион в контексте всей строки.

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