Введение
В этом практическом занятии (лабораторной работе) вы научитесь проверять, соответствует ли заданная строка формату URL на Java с использованием регулярных выражений. Мы определим шаблон регулярного выражения, специально разработанный для URL, воспользуемся методом Pattern.matches() для проверки строк на соответствие этому шаблону и рассмотрим, как проверить правильность общих схем URL. Это практическое упражнение приведет вас по шагам к реализации проверки URL в ваших Java-приложениях.
Определение регулярного выражения для URL
На этом этапе мы научимся определять регулярное выражение (regex) в Java для сопоставления с URL. Регулярные выражения, часто сокращенные до "regex" или "regexp", представляют собой последовательности символов, которые определяют шаблон поиска. Они чрезвычайно мощны для сопоставления шаблонов и манипуляции строками.
Для проверки правильности URL регулярное выражение помогает нам проверить, соответствует ли заданная строка стандартной структуре URL (например, http://www.example.com или https://example.org/path).
Создадим новый Java-файл для работы с регулярными выражениями.
Откройте WebIDE. В проводнике файлов слева убедитесь, что вы находитесь в директории
~/project.Щелкните правой кнопкой мыши в пустом пространстве директории
~/projectи выберите "New File".Назовите новый файл
UrlValidator.javaи нажмите Enter.Файл
UrlValidator.javaдолжен открыться в редакторе кода.Скопируйте и вставьте следующий Java-код в редактор:
import java.util.regex.Pattern; public class UrlValidator { public static void main(String[] args) { // Define a simple regex pattern for a URL String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$"; // Compile the regex pattern Pattern pattern = Pattern.compile(urlRegex); System.out.println("URL Regex Pattern Defined."); } }Разберем новые части этого кода:
import java.util.regex.Pattern;: Эта строка импортирует классPattern, который является частью встроенной поддержки регулярных выражений в Java.String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";: Эта строка определяет переменную типаStringс именемurlRegexи присваивает ей наше регулярное выражение.^: Соответствует началу строки.(http|https): Соответствует либо "http", либо "https".://: Соответствует литеральным символам "://".[^\\s/$.?#]: Соответствует любому символу, который НЕ является пробельным символом (\\s), косой чертой (/), знаком доллара ($), точкой (.), вопросительным знаком (?) или хэш-символом (#). Это упрощенный способ сопоставить часть доменного имени..: Соответствует любому символу (кроме перевода строки).[^\\s]*: Соответствует нулю или более символам, которые НЕ являются пробельными. Это упрощенный способ сопоставить остальную часть пути URL и запроса.$: Соответствует концу строки.- Обратите внимание на двойные обратные слэши (
\\) передs. В строках Java одинарный обратный слэш является символом экранирования, поэтому нам нужно использовать\\для представления литерального обратного слэша в регулярном выражении.
Pattern pattern = Pattern.compile(urlRegex);: Эта строка компилирует строку регулярного выражения в объектPattern. Компиляция шаблона более эффективна, если вы планируете использовать один и тот же шаблон несколько раз.System.out.println("URL Regex Pattern Defined.");: Эта строка просто выводит сообщение в консоль, указывающее, что шаблон был определен.
Сохраните файл (Ctrl+S или Cmd+S).
Теперь скомпилируем эту Java-программу. Откройте терминал внизу WebIDE. Убедитесь, что вы находитесь в директории
~/project.Скомпилируйте код с помощью команды
javac:javac UrlValidator.javaЕсли нет ошибок, команда завершится без вывода. В директории
~/projectбудет создан файлUrlValidator.class.Запустите скомпилированную программу с помощью команды
java:java UrlValidatorВы должны увидеть следующий вывод:
URL Regex Pattern Defined.
Вы успешно определили и скомпилировали Java-программу, которая включает в себя базовое регулярное выражение для URL. На следующем этапе мы будем использовать этот шаблон для проверки, являются ли различные строки допустимыми URL.
Тестирование URL с использованием Pattern.matches()
На предыдущем этапе мы определили регулярное выражение для URL и скомпилировали его в объект Pattern. Теперь давайте используем этот шаблон для проверки, являются ли различные строки допустимыми URL с помощью метода Pattern.matches().
Метод Pattern.matches(regex, input) представляет собой удобный способ проверить, соответствует ли вся входная строка заданному регулярному выражению. Он компилирует регулярное выражение и проверяет входную строку на соответствие ему за один шаг.
Давайте изменим наш файл UrlValidator.java для проверки некоторых примеров URL.
Откройте файл
UrlValidator.javaв редакторе WebIDE, если он еще не открыт.Измените метод
main, добавив следующий код. Этот код нужно добавить после строкиPattern pattern = Pattern.compile(urlRegex);.import java.util.regex.Pattern; public class UrlValidator { public static void main(String[] args) { // Define a simple regex pattern for a URL String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$"; // Compile the regex pattern Pattern pattern = Pattern.compile(urlRegex); // Test some URLs String url1 = "http://www.example.com"; String url2 = "https://example.org/path/to/page"; String url3 = "ftp://invalid-url.com"; // Invalid scheme String url4 = "http:// example.com"; // Invalid character (space) System.out.println("\nTesting URLs:"); boolean isUrl1Valid = Pattern.matches(urlRegex, url1); System.out.println(url1 + " is valid: " + isUrl1Valid); boolean isUrl2Valid = Pattern.matches(urlRegex, url2); System.out.println(url2 + " is valid: " + isUrl2Valid); boolean isUrl3Valid = Pattern.matches(urlRegex, url3); System.out.println(url3 + " is valid: " + isUrl3Valid); boolean isUrl4Valid = Pattern.matches(urlRegex, url4); System.out.println(url4 + " is valid: " + isUrl4Valid); } }Вот что мы добавили:
- Мы определили четыре переменные типа
String(url1,url2,url3,url4), содержащие различные примеры строк, некоторые из которых являются допустимыми URL по нашему простому шаблону, а некоторые - недопустимыми. - Мы добавили инструкцию вывода для более ясного отображения результата.
- Мы использовали метод
Pattern.matches(urlRegex, url)для каждой тестовой строки. Этот метод возвращаетtrue, если вся строка соответствует шаблонуurlRegex, иfalseв противном случае. - Мы вывели результат проверки для каждого URL.
- Мы определили четыре переменные типа
Сохраните файл
UrlValidator.java.Скомпилируйте измененный код в терминале:
javac UrlValidator.javaОпять же, если компиляция прошла успешно, никакого вывода не будет.
Запустите скомпилированную программу:
java UrlValidatorВы должны увидеть вывод, похожий на следующий:
URL Regex Pattern Defined. Testing URLs: http://www.example.com is valid: true https://example.org/path/to/page is valid: true ftp://invalid-url.com is valid: false http:// example.com is valid: false
Этот вывод показывает, что наше простое регулярное выражение правильно определило первые две строки как допустимые URL (согласно шаблону), а последние две - как недопустимые.
Теперь вы успешно использовали метод Pattern.matches() для проверки строк на соответствие регулярному выражению в Java.
Валидация общих схем URL
На предыдущих этапах мы определили простое регулярное выражение и использовали метод Pattern.matches() для его проверки. Наш текущий шаблон валидирует только URL, начинающиеся с http или https. Однако URL могут иметь другие схемы, такие как ftp, mailto, file и т.д.
На этом этапе мы изменим наше регулярное выражение, чтобы оно включало в себя больше общих схем URL. Более надежный шаблон регулярного выражения для URL довольно сложен, но мы можем расширить наш текущий шаблон, добавив несколько более общих схем для демонстрации.
Давайте обновим файл UrlValidator.java.
Откройте файл
UrlValidator.javaв редакторе WebIDE.Измените строку
urlRegex, чтобы она включала схемыftpиmailtoпомимоhttpиhttps. Также добавим тестовый случай для URL с схемойftp.Замените строку:
String urlRegex = "^(http|https)://[^\\s/$.?#].[^\\s]*$";на:
String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$";Обратите внимание, что мы просто добавили
|ftp|mailtoвнутри скобок(), которые представляют группу, а символ|действует как оператор "ИЛИ". Это означает, что шаблон теперь будет соответствовать строкам, начинающимся сhttp,https,ftpилиmailto, за которыми следует://.Добавьте новый тестовый случай для URL с схемой FTP. Добавьте следующие строки после определения
url4:String url5 = "ftp://ftp.example.com/files"; // Valid FTP URLДобавьте валидацию для
url5после валидации дляurl4:boolean isUrl5Valid = Pattern.matches(urlRegex, url5); System.out.println(url5 + " is valid: " + isUrl5Valid);Теперь ваш полный метод
mainдолжен выглядеть следующим образом:import java.util.regex.Pattern; public class UrlValidator { public static void main(String[] args) { // Define a simple regex pattern for a URL including more schemes String urlRegex = "^(http|https|ftp|mailto)://[^\\s/$.?#].[^\\s]*$"; // Compile the regex pattern Pattern pattern = Pattern.compile(urlRegex); System.out.println("URL Regex Pattern Defined."); // Test some URLs String url1 = "http://www.example.com"; String url2 = "https://example.org/path/to/page"; String url3 = "invalid-url.com"; // Invalid (missing scheme) String url4 = "http:// example.com"; // Invalid character (space) String url5 = "ftp://ftp.example.com/files"; // Valid FTP URL System.out.println("\nTesting URLs:"); boolean isUrl1Valid = Pattern.matches(urlRegex, url1); System.out.println(url1 + " is valid: " + isUrl1Valid); boolean isUrl2Valid = Pattern.matches(urlRegex, url2); System.out.println(url2 + " is valid: " + isUrl2Valid); boolean isUrl3Valid = Pattern.matches(urlRegex, url3); System.out.println(url3 + " is valid: " + isUrl3Valid); boolean isUrl4Valid = Pattern.matches(urlRegex, url4); System.out.println(url4 + " is valid: " + isUrl4Valid); boolean isUrl5Valid = Pattern.matches(urlRegex, url5); System.out.println(url5 + " is valid: " + isUrl5Valid); } }Сохраните файл
UrlValidator.java.Скомпилируйте обновленный код в терминале:
javac UrlValidator.javaЗапустите скомпилированную программу:
java UrlValidatorТеперь вы должны увидеть вывод, похожий на следующий, при этом URL с схемой FTP также будет помечен как допустимый:
URL Regex Pattern Defined. Testing URLs: http://www.example.com is valid: true https://example.org/path/to/page is valid: true invalid-url.com is valid: false http:// example.com is valid: false ftp://ftp.example.com/files is valid: true
Вы успешно изменили регулярное выражение, чтобы оно включало больше общих схем URL, и проверили обновленный шаблон. Это демонстрирует, как можно настраивать регулярные выражения для соответствия более широкому диапазону входных данных.
Резюме
В этом практическом занятии мы начали с изучения того, как определить регулярное выражение в Java для валидации URL. Мы создали новый Java-файл UrlValidator.java и импортировали класс java.util.regex.Pattern. Затем мы определили переменную типа String с именем urlRegex, содержащую базовое регулярное выражение, предназначенное для сопоставления строк, начинающихся с "http" или "https", за которыми следует "://", и скомпилировали этот шаблон с помощью метода Pattern.compile(). Этот первый этап был посвящен настройке необходимых инструментов и определению основного шаблона для валидации URL с использованием встроенных возможностей регулярных выражений в Java.



