在检查 url 的其余部分类似于字符串后,我想从 url 获取用户名。
例如:我需要来自 url 'http://mysite.com/username' 的用户名。在此之前需要检查
网站网址为“http://mysite.com/”,并且用户名部分仅包含字母、数字、
下划线和句号..
怎么可能使用php?
我用 PHP5.4.5 测试过:
<?php
$simple = 'http://mysite.com/username';
if ( preg_match('/http:\/\/mysite\.com\/(?:([-\w]+)\/?)/', $simple, $match) > 0){
echo 'Username is: '.$match[1] . "\n";
}
$complex = 'http://mysite.com.zzz.yyy/john/';
if ( preg_match('/http:\/\/\w+(?:\.\w+)*\/(?:([-\w]+)\/?)/', $complex, $match) > 0){
echo 'Username is: '.$match[1] . "\n";
}
?>
输出:
Username is: username
Username is: john
有解析 URL 的函数:
http://php.net/manual/en/function.parse-url.php
如果你这样做:
$url = 'http://mysite.com/username';
$array = parse_url($url);
print_r($array);
你会看到这个:
Array
(
[scheme] => http
[host] => mysite.com
[path] => /username
)
现在您可以单独处理 URL 的路径。如果还有更多内容,/username/
那么您将拆分 '/' 并使用返回的第一个项目。
$path_array = explode('/',$array['path']);
如果您想使用正则表达式尝试此操作,您可以使用具有两个捕获组的模式,一个用于域名,一个用于用户名,如下所示:
^http\:\/\/([^/]+)\/(.+)$
(我在那里转义了冒号,因为老实说我不记得是否有必要。如果没有,它不需要转义字符)
这将查找 http:// 后跟一个不包含 / 的字符串(因此它会一直抓取直到它到达下一个 /),然后需要一个 / 然后抓取任何其他后续内容直到结束字符串。
这就是你所拥有的:
preg_match('/mysite.com//[a-zA-Z0-9-]';, $user_name, $matches);
你没有分隔符,那是什么;
?试试这个:
preg_match('|/mysite.com//[a-zA-Z0-9-]|', $user_name, $matches);
$url = "http://mysite.com/username";
$arr = parse_url($url);
if($arr['host'] != "mysite.com"){
// do something
}
print_r(trim($arr['path'],'/'));