gpt4 book ai didi

php - 使用正则表达式删除字符串的一部分

转载 作者:可可西里 更新时间:2023-11-01 13:12:41 24 4
gpt4 key购买 nike

我正在尝试使用 Regex 去除字符串的一部分(恰好是一个 url)。我在正则表达式方面做得越来越好,但无法弄清楚如何告诉它字符串之前或之后的内容是可选的。这是我的东西

$string='http://www.example.com/username?refid=22';
$new_string= preg_replace('/[/?refid=0-9]+/', '', $string);
echo $new_string;

我正在尝试删除 ?refid=22 部分以获取 http://www.example.com/username

想法?

编辑我想我需要使用 Regex 而不是爆炸,因为有时 url 看起来像 http://example.com/profile.php?id=9999&refid=22 在这种情况下,我还想删除 refid 但没有得到 id=9999

最佳答案

parse_url()非常适合解析 URL :)

$string = 'http://www.example.com/username?refid=22';

$url = parse_url($string);

// Ditch the query.
unset($url['query']);

echo array_shift($url) . '://' . implode($url);

CodePad .

输出

http://www.example.com/username

如果您只想删除特定的 GET 参数,请执行此操作...

parse_str($url['query'], $get);

unset($get['refid']);

$url['query'] = http_build_query($get);

CodePad .

输出

http://example.com/profile.php?id=9999

如果您有扩展名,您可以使用 http_build_url() 重建 URL .

否则你可以假设用户名/密码/端口并自己构建。

更新

只是为了好玩,下面是对正则表达式的更正。

preg_replace('/\?refid=\d+\z/', '', $string);
  • [] 是一个字符类。您试图在其中放置特定顺序的字符。
  • \是转义字符,不是/
  • \d 是字符类 [0-9] 的简短版本。
  • 我把最后一个字符 anchor (\z) 放在那里,因为它看起来总是在字符串的末尾。如果不是,请将其删除。

关于php - 使用正则表达式删除字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5711550/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com