任务是查找字符串是以http://或https://还是以ftp://
开头$ regex =“((https?| ftp)://)?”;
但是preg_match($ regex)无法正常工作。我应该改变什么?
答案 0 :(得分:3)
您需要在RegExp周围使用分隔符(/):)
// Protocol's optional
$regex = "/^((https?|ftp)\:\/\/)?/";
// protocol's required
$regex = "/^(https?|ftp)\:\/\//";
if (preg_match($regex, 'http://www.google.com')) {
// ...
}
答案 1 :(得分:1)
是否有必要使用正则表达式?可以使用字符串函数实现相同的功能:
if (strpos($url, 'http://') === 0 ||
strpos($url, 'https://') === 0 ||
strpos($url, 'ftp://') === 0)
{
// do magic
}
答案 2 :(得分:0)
您需要:preg_match ('#((https?|ftp)://)?#', $url)
#
分隔符无需转义/
,这对于网址来说更方便
答案 3 :(得分:0)
像这样:
$search_for = array('http', 'https', 'ftp');
$scheme = parse_url($url, PHP_URL_SCHEME);
if (in_array($scheme, $search_for)) {
// etc.
}