php 如何在特定位置获取字符串


php how to get a string in a specific place

我有这个字符串

http://

myipaddress:myport/mycompanyname/morethings?lovelyparameter

我想把这个词mycompanyname

有什么帮助吗?

我试过这个:

$indexName = preg_match("http://p+:p+/","http://myipaddress:myport/mycompanyname/morethings?lovelyparameter" );

但是我收到此错误:

preg_match(): Delimiter must not be alphanumeric or backslash

如果你不想要 preg 函数,以及 url 中的其他内容,你可以使用 parse_url()。它看起来像这样:

$a = 'http://myipaddress:8080/mycompanyname/morethings?lovelyparameter';
$b = parse_url($a);
print_r($b);

输出:

Array
(
    [scheme] => http
    [host] => myipaddress
    [port] => 8080
    [path] => /mycompanyname/morethings
    [query] => lovelyparameter
)

这样,只需使用类似以下内容:

$path = $b['path'];
$foo = explode('/', $path)[1];
echo $foo;

输出:

我的公司名称


旁注:
  • 此代码不会检查格式错误的 url,因此您应该自己进行一些检查。
  • 如果您使用端口号作为字符串来测试 url(如问题中所示),它将不起作用。

它可以在一行中完成:

$url = 'http://myipaddress:8080/mycompanyname/morethings?lovelyparameter';
echo explode('/', parse_url($url, PHP_URL_PATH))[1];

输出:

我的公司名称

您可以使用爆炸为

$abc = 'http://myipaddress:myport/mycompanyname/morethings?lovelyparameter';
$a = explode('/', $abc);
echo '<pre>';
print_r($a[3]);
echo '</pre>';
分解将字符串

分解成多个部分并返回一个字符串数组,以便您也可以签入 mycompanyname 的数组。

对于记录,您缺少适当的分隔符。正则表达式解决方案是:

https?://.+?/(?P<company>[^/]+)/

PHP中,这将是:

$regex = '~https?://.+?/(?P<company>[^/]+)/~';
$url = 'http://myipaddress:8080/mycompanyname/morethings?lovelyparameter';
preg_match($regex, $url, $match);
echo $match["company"];
// mycompanyname