我希望在检查其余网址类似于字符串后,从网址获取用户名。
例如:我需要来自网址“http://mysite.com/username”的用户名。在此之前需要检查
网站网址为“http://mysite.com/”,用户名部分仅包含字母,数字,
下划线和句号..
如何使用php?
答案 0 :(得分:1)
我已经使用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
答案 1 :(得分:1)
有解析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']);
答案 2 :(得分:0)
如果你想用regex试试这个,你可以使用一个带有两个捕获组的模式,一个用于域名,一个用于用户名,如下所示:
^http\:\/\/([^/]+)\/(.+)$
(我逃过了那里的冒号,因为我真的不记得我的头顶是否有必要。如果没有,它不需要逃脱角色)
这将查找http://后跟一个不包含/的字符串(因此它会一直抓到它到达下一个/),然后期望一个/然后抓住其他任何后续的字符串直到字符串的结尾。
答案 3 :(得分:0)
这就是你所拥有的:
preg_match('/mysite.com//[a-zA-Z0-9-]';, $user_name, $matches);
你没有分隔符,;
有什么分隔符?试试这个:
preg_match('|/mysite.com//[a-zA-Z0-9-]|', $user_name, $matches);
答案 4 :(得分:0)
$url = "http://mysite.com/username";
$arr = parse_url($url);
if($arr['host'] != "mysite.com"){
// do something
}
print_r(trim($arr['path'],'/'));