如何在将url与特定字符串匹配后从网址获取用户名?

时间:2012-08-08 05:36:23

标签: php regex

我希望在检查其余网址类似于字符串后,从网址获取用户名。

例如:我需要来自网址“http://mysite.com/username”的用户名。在此之前需要检查

网站网址为“http://mysite.com/”,用户名部分仅包含字母,数字,

下划线和句号..

如何使用php?

5 个答案:

答案 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'],'/'));