Почему этот шаблон не соответствует порту в моем URL-адресе?Почему это регулярное выражение java не работает?
public class PatternTest {
private Pattern PORT_STRING_PATTERN = Pattern.compile(":\\d+/");
private boolean hasPort(String url) {
return PORT_STRING_PATTERN.matcher(url).matches();
}
@Test
public void testUrlHasPort() {
assertTrue("does not have port", hasPort("http://www.google.com:80/"));
}
}
Если изменить шаблон на Pattern.compile("^.+:\\d+/")
это делает матч. Зачем мне нужен ^.+
?
Yup, классическая ошибка и (imho) ошибка от разработчиков API Java API для начала. – fge
@fge: По моему скромному мнению, я не думаю, что это ошибка. Поскольку для проверки правильности требуется «конец строки» (когда вы используете 'match' на других языках), обычно используется' $ ', хотя это не всегда означает абсолютный конец строки. Если строка заканчивается последовательностью терминатора линии, то '$' может совпадать прямо перед ней. – nhahtdh
@nhahtdh: Имея два доступных вызова, имеет смысл. Однако вызов «совпадения всей области» вызывает «совпадения». –