Регулярное выражение, содержащее привязку ($) при сопоставлении с вводом, показывает неожиданный результат в следующей программе. Почему? - PullRequest
1 голос
/ 26 ноября 2010
/*
    patString: it$
    input: this is it
    the output at 2 to the match operation at 1 is false, why?
*/

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.Console;

public class Test {
    public static void main(String args[])  {
        Console con = System.console();
        String patString, input;
        patternString  = con.readLine("Enter pattern: "); //pattern 
        input =  con.readLine("input: "); // input string to match against pattern
        Pattern pattern = Pattern.compile(patString);
        Matcher matcher = pattern.matcher(input);
        boolean testMatch = matcher.matches(); //1
        System.out.println("match found: " + testMatch); //2
    }
}

Ответы [ 2 ]

7 голосов
/ 26 ноября 2010

метод Matcher.matches() пытается сопоставить всю строку с данным шаблоном, или другими словами, он имеет неявное ^...$, окружающее шаблон.

Требуется метод find()

Из javadoc для Matcher :

  • matcher () :Пытается сопоставить всю входную последовательность с шаблоном
  • find () : Пытается найти следующую подпоследовательность входной последовательности, которая соответствует шаблону.
1 голос
/ 26 ноября 2010

Поскольку Matcher.matches() пытается сопоставить всю строку с шаблоном

public boolean matches()

Попытки сопоставить весь регион с шаблоном. Если совпадение прошло успешно, дополнительную информацию можно получить с помощью методов start, end и group.

Возвращает: Значение true, если и только если вся последовательность областей соответствует шаблону этого сопоставителя

См. Matcher.matches ()

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