Java очень простая головоломка с регулярными выражениями - PullRequest
0 голосов
/ 31 октября 2011

Я понимаю, что к регулярным выражениям Java можно получить доступ из удобного метода String * matches, или пойти по длинному маршруту и ​​сделать Pattern и т. Д. Итак, следующий код должен действительно вывести 2 «Да! " линии на выход. Это печатает "Да!" линия и линия "нет". Чего мне не хватает?

import java.util.regex.*;

public class TestRegex {
public static void main(String[] args) {
    String pattern = "html";
    String input   = "somehtml.txt";

    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(input);

    if(m.find()) {
        System.out.println("Yes!");
    }
    else {
        System.out.println("no");
    }

    if(input.matches(pattern)) {
        System.out.println("Yes!");
    }
    else {
        System.out.println("no");
    }

}

}

Выход:

Yes!
no

Java версия 1.6 на 64-битной Win7.

C: \ Users \ Michael Smith> java-версия Java-версия "1.6.0_24" Java (TM) SE Runtime Environment (сборка 1.6.0_24-b07) Java HotSpot (TM) 64-разрядная серверная виртуальная машина (сборка 19.1-b02, смешанный режим)

Ответы [ 2 ]

5 голосов
/ 31 октября 2011

matches() проверяет всю строку, соответствующую регулярному выражению.find() ищет только совпадение где-то в строке.

2 голосов
/ 31 октября 2011

String # Matches метод проверяет шаблон по всему входному тексту.По этой причине ваш код печатается no во второй раз. Matcher # Find сканирует вход, чтобы найти следующую совпадающую подпоследовательность на входе.

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