从开始和结束字符串中删除字符

时间:2021-07-03 08:46:06

标签: php preg-replace substr strpos

我只想从 URL 输出 MYID。到目前为止我做了什么:

$url = "https://whatever.expamle.com/display/MYID?out=1234567890?Browser=0?OS=1";
echo substr($url, 0, strpos($url, "?out="));

输出:https://whatever.expamle.com/display/MYID

$url = preg_replace('#^https?://whatever.expamle.com/display/#', '', $url);
echo $url;

输出:MYID?out=1234567890?Browser=0?OS=1

我怎样才能把它结合起来?谢谢。

2 个答案:

答案 0 :(得分:2)

对于更通用的解决方案,我们可以使用带有 preg_match_all 的正则表达式:

$url = "https://whatever.expamle.com/display/MYID?out=1234567890?Browser=0?OS=1";
preg_match_all("/\/([^\/]+?)\?/", $url, $matches);
print_r($matches[1][0]);  // MYID

答案 1 :(得分:0)

当字符串始终是统一资源定位符 (URL) 时,就像您在问题中提出的那样,

给定以下字符串:

$url = "https://whatever.expamle.com/display/MYID?out=1234567890?Browser=0?OS=1";

您可以从首先解析它中受益:

$parts = parse_url($url);

然后利用 MYID 是最后一个路径组件这一事实:

$str = preg_replace(
    '~^.*/(?=[^/]*$)~' /* everything but the last path component */,
    '',
    $parts['path']
);

echo $str, "\n"; # MYID

然后根据您的需要,您可以与任何其他部分组合,例如仅最后一个带有查询字符串的路径组件:

echo "$str?$parts[query]", "\n"; # MYID?out=1234567890?Browser=0?OS=1

以防万一:如果字符串已经表示结构化数据,请使用专用解析器对其进行分割(将其切成小块)。然后更容易获得您正在寻找的结果。

如果您使用的是 Linux/Unix,则它更容易并且无需正则表达式即可工作,因为 basename() 函数返回路径的最后一个组件(不适用于 Windows):

echo basename(parse_url($url, PHP_URL_PATH)), 
     '?',
     parse_url($url, PHP_URL_QUERY), 
     "\n"
     ;