使用preg_match验证url的简单正则表达式总是返回false


simple regex to validate url returns always false with preg_match

我知道有很多主题显示正则表达式来验证URL。还有一个FILTER_VALIDATE_URL函数,我也知道。

我想知道我的正则表达式出了什么问题,以了解它出了什么问题。

我的正则表达式应该匹配URL的http://或https://在它前面。之后可以是任何字符,一个或多个。它应该以一个点结束,然后是一个2到5个字符的字符串。

        $s = preg_match('^(http|https)://.+('.[a-z]{2,5})$', $url);

我尝试了这个正则表达式http://regexpal.com/。它匹配正确,但是我的preg_match调用总是返回false。有人能解释给我什么是不正确的这个正则表达式?

Thank You Very Much

在PHP中,您需要在正则表达式语法中使用分隔符。分隔符可以是任何非字母数字、非反斜杠、非空白字符。大多数人使用/作为分隔符,但由于它出现在URL中,您可以使用另一个字符,例如#以避免转义:

'#^(http|https)://.+('.[a-z]{2,5})$#'

旁注:(http|https)将捕获,因为它被包裹在括号中。您实际上并不需要这个,但是只写https?也更简单,其中?使s成为表达式中的可选字符。