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

发布于 2024-11-02 08:03:06 字数 515 浏览 2 评论 0原文

我正在尝试使用正则表达式删除字符串的一部分(恰好是一个网址)。我对正则表达式的了解越来越好,但不知道如何告诉它字符串之前或之后的内容是可选的。这是我

$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

想法?

编辑 我想我需要使用正则表达式而不是爆炸,因为有时网址看起来像 http://example.com/profile.php?id=9999&refid=22 在这种情况下我也想删除refid 但未获取 id=9999

I'm trying to strip part of a string (which happens to be a url) with Regex. I'm getting better out regex but can't figure out how to tell it that content before or after the string is optional. Here is what I have

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

I'm trying to remove the ?refid=22 part to get http://www.example.com/username

Ideas?

EDIT
I think I need to use Regex instead of explode becuase sometimes the url looks like http://example.com/profile.php?id=9999&refid=22 In this case I also want to remove the refid but not get id=9999

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

涙—继续流 2024-11-09 08:03:06

parse_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

如果您有扩展程序,则可以使用 < 重建 URL代码>http_build_url()

否则,您可以假设用户名/密码/端口并自行构建。

更新

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

preg_replace('/\?refid=\d+\z/', '', $string);
  • [] 是一个字符类。您试图在其中放置特定的字符顺序。
  • \ 是转义字符,而不是 /
  • \d 是字符类[0-9] 的简短版本。
  • 我将最后一个字符锚点 (\z) 放在那里,因为它似乎始终位于字符串的末尾。如果没有,请将其删除。

parse_url() is good for parsing URLs :)

$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.

Output

http://www.example.com/username

If you only wanted to remove that specific GET param, do this...

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

unset($get['refid']);

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

CodePad.

Output

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

If you have the extension, you can rebuild the URL with http_build_url().

Otherwise you can make assumptions about username/password/port and build it yourself.

Update

Just for fun, here is the correction for your regular expression.

preg_replace('/\?refid=\d+\z/', '', $string);
  • [] is a character class. You were trying to put a specific order of characters in there.
  • \ is the escape character, not /.
  • \d is a short version of the character class [0-9].
  • I put the last character anchor (\z) there because it appears it will always be at the end of your string. If not, remove it.
阳光下慵懒的猫 2024-11-09 08:03:06

如果不需要,请不要使用正则表达式

echo current( explode( '?', $string ) );

Dont use regexs if you dont have to

echo current( explode( '?', $string ) );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文