Вопрос о странном поведении Java-регулярных выражений - PullRequest
0 голосов
/ 29 июля 2010

Я работаю над регулярным выражением, которое может соответствовать первым цифрам и. в строке. Но, похоже, просто не работает правильно. Я использую регулярное выражение

"^[\\.\\d]+"

Ниже мой код:

public void testMiscellaneous() throws Exception {
    System.out.println("~~~~~~~~~~~~~~~~~~~testMiscellaneous~~~~~~~~~~~~~~~~~~~~");
    String s1 = ".123 *[DP7_Dog]";
    String s2 = ".123";
    String s3 = "1.12.3";
    String s4 = "a1.12.3";
    final String numberRegex = "^[\\.\\d]+";
    System.out.println(s1.matches(numberRegex));
    System.out.println(s2.matches(numberRegex));
    System.out.println(s3.matches(numberRegex));
    System.out.println(s4.matches(numberRegex));
}

Выходы

false
true
true
false

Однако я бы ожидал, правда, правда, правда, ложь. Должно быть что-то не так с регулярным выражением, но я не могу его найти. Кто-нибудь может помочь? Благодаря.

1 Ответ

2 голосов
/ 29 июля 2010

Проблема в том, что matches() настаивает на сопоставлении всей входной строки, как если бы в начале вашего регулярного выражения было ^, а в конце - $.

Возможно, вам лучше использовать Matcher.find() или Matcher.lookingAt(), или (если вы хотите быть глупым и ленивым, как я), просто добавив .* в конец вашего паттерна.

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