Если вы хотите изменить выражение, чтобы соответствовать либо совершенно пустая строка или полный URL, вам нужно будет использовать анкерные метасимволы^и $ (которые соответствуют началу и концу строки соответственно).
^(|https?:\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)$
Как dirkgently отметил, вы можете упростить матч для протокола мало, поэтому я включил, что для вас тоже.
Хотя, если вы используете это выражение из программы или скрипта, вам может быть проще использовать языки, соответствующие средствам проверки, является ли вход пустым.
// in no particular language...
if input.length > 0 then
if input matches <regex> then
input is a URL
else
input is invalid
else
input is empty
Это не приходила мне в голову из вашего вопроса, что вы совпадающие строки в текстовом файле ... Я думал, что вы, вероятно, разбор HTML из HTTP-ответов для ссылок внутри и не мог понять, контекст вашей цели «пустой строки», пока я не прочитаю выбранный вами ответ. Подумайте иначе, а? – Hardryv
в случае, если это полезно для всех, кто просматривает, как и я, лучшая строка соответствия, которую я создал для URL-адресов, закодированных в HTML, - это «((http) s?: \/\ /) ([\ W \. \ -_] * (\ /)?) * (# [\ ш \. \ -_])?» - Я тестировал его на нескольких популярных сайтах со многими ссылками каждый, и он также будет содержать тег для поиска по URL-адресу конца URL-адреса – Hardryv