0

在检查 url 的其余部分类似于字符串后,我想从 url 获取用户名。

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

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

下划线和句号..

怎么可能使用php?

4

5 回答 5

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
于 2012-08-08T05:49:06.577 回答
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']);
于 2012-08-08T05:52:33.333 回答
0

如果您想使用正则表达式尝试此操作,您可以使用具有两个捕获组的模式,一个用于域名,一个用于用户名,如下所示:

^http\:\/\/([^/]+)\/(.+)$

(我在那里转义了冒号,因为老实说我不记得是否有必要。如果没有,它不需要转义字符)

这将查找 http:// 后跟一个不包含 / 的字符串(因此它会一直抓取直到它到达下一个 /),然后需要一个 / 然后抓取任何其他后续内容直到结束字符串。

于 2012-08-08T05:43:17.000 回答
0

这就是你所拥有的:

preg_match('/mysite.com//[a-zA-Z0-9-]';, $user_name, $matches);

你没有分隔符,那是什么;?试试这个:

preg_match('|/mysite.com//[a-zA-Z0-9-]|', $user_name, $matches);
于 2012-08-08T05:47:23.287 回答
0
$url = "http://mysite.com/username";
$arr = parse_url($url);
if($arr['host'] != "mysite.com"){
    // do something 
}
print_r(trim($arr['path'],'/'));
于 2012-08-08T05:53:59.767 回答