Для поиска URL в строке текста можно использовать регулярное выражение. URL (Uniform Resource Locator) представляет собой адрес, по которому можно найти ресурс в сети Интернет.
Прежде чем создавать само регулярное выражение, необходимо понять, что значит "правильный" URL. В стандарте RFC 3986 определены общие правила для URL:
- URL может начинаться с протокола (например, "http://") или без него.
- Доменное имя может состоять из латинских букв, цифр и дефиса. Оно может содержать точки для разделения поддоменов.
- URL может содержать порт, указанный после двоеточия (например, ":8080").
- Путь может содержать латинские буквы, цифры, специальные символы и слэши.
- URL может содержать параметры, указанные после вопросительного знака (например, "?param=value").
- URL может содержать якорь, указанный после символа решетки (например, "#anchor").
На основе этих правил, мы можем создать регулярное выражение для поиска URL:
$pattern = '/^(https?://)?([a-z0-9-]+.)+[a-z]{2,6}([/w .-]*)*/?$/i';
Давайте разберем его по частям:
- /^
- начало строки.
- (https?://)?
- необязательная группа, определяющая протокол "http://" или "https://".
- ([a-z0-9-]+.)+
- группа, определяющая доменное имя. Она может содержать латинские буквы, цифры и дефисы, а также точку, чтобы разделить поддомены. Знак "+" означает, что эта группа может повторяться несколько раз.
- [a-z]{2,6}
- опциональная группа, указывающая на доменное расширение верхнего уровня, такое как .com, .org или .xyz.
- ([/w .-]*)*
- группа, определяющая путь. Она может содержать латинские буквы, цифры, специальные символы ("/", ".", "-" и пробел) и повторяться несколько раз.
- /?
- символ слэша, указывающий, что путь может или не может оканчиваться на слэш.
- $
- конец строки.
Флаг /i
в конце регулярного выражения означает, что поиск должен быть регистро-независимым.
Для проверки URL с использованием данного регулярного выражения в PHP, можно воспользоваться функцией preg_match():
$url = "http://example.com"; if (preg_match($pattern, $url)) { echo "Правильный URL"; } else { echo "Неправильный URL"; }
Это основное регулярное выражение для поиска URL. Однако, стоит отметить, что оно не покрывает все возможные варианты, так как URL может иметь дополнительные параметры, заголовки и другие сложно учитываемые особенности. Если вам нужно более точное регулярное выражение, вы можете дополнить его или использовать готовые библиотеки для разбора URL.