2009-02-26 2 views
3

Текущее выражение проверяет веб-адрес (HTTP), как его изменить, чтобы пустая строка также соответствовала?Регулярное выражение, которое проверяет веб-адрес и соответствует пустой строке?

(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? 
+0

Это не приходила мне в голову из вашего вопроса, что вы совпадающие строки в текстовом файле ... Я думал, что вы, вероятно, разбор HTML из HTTP-ответов для ссылок внутри и не мог понять, контекст вашей цели «пустой строки», пока я не прочитаю выбранный вами ответ. Подумайте иначе, а? – Hardryv

+0

в случае, если это полезно для всех, кто просматривает, как и я, лучшая строка соответствия, которую я создал для URL-адресов, закодированных в HTML, - это «((http) s?: \/\ /) ([\ W \. \ -_] * (\ /)?) * (# [\ ш \. \ -_])?» - Я тестировал его на нескольких популярных сайтах со многими ссылками каждый, и он также будет содержать тег для поиска по URL-адресу конца URL-адреса – Hardryv

ответ

5

Если вы хотите изменить выражение, чтобы соответствовать либо совершенно пустая строка или полный 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 
+0

Принято как ответ, потому что вы были единственным человеком, который упомянул требуемые^и $, без которых просто добавление? сделал любое соответствие шаблону. Благодаря! –

0

Поместите все выражение в скобках и пометить его как дополнительный («?» кванторное, ни или одно повторение):

((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)? 
+0

Вниз проголосовали, потому что предлагаемое выражение возвращает True для IsMatch («asd»); –

+0

Вы тоже не считали это выражение. – Gumbo

0

Expr? где Expr это ваш URL Искателя. Как и я, для http и https: https?. ? известен как квантификатор - вы можете найти его. От Wikipedia:

? Значок вопроса указывает, что есть нуль или один из предыдущего элемента.

+0

Это отличное имя DG, наш мир - меньшее место без DA в нем. – Hardryv

Смежные вопросы