假设我的网址是:
http://example.com/forum/index.php?topic=53.msg251#msg251
这部分在这里,我无法弄清楚如何删除:
.msg251#msg251
我确实尝试过,我不确定我是否接近做得正确。
$linkraw = $items->link;
$linkpattern = '/^.msg247#msg247/';
$link = preg_match($linkpattern, $linkraw);
这样做的正确方法是什么?我正在努力学习。
答案 0 :(得分:4)
字符串函数strrpos和substr足以完成此任务。它肯定更快。
$link = substr($linkraw, 0, strrpos($linkraw, "."))
strrpos
从字符串末尾找到.
的位置。substr
提取子字符串,直到上一步中找到.
的位置。适用于http://example.com/forum/index.php?topic=53.msg251#msg251
适用于http://example.com/forum/index.php?topic=53.new#new
但http://example.com/forum/index.php?topic=53.msg251#msg251.new#new
答案 1 :(得分:1)
如果要删除,请使用preg_replace:
$link = preg_replace('/\..*?$/', '', $linkraw);
答案 2 :(得分:0)
使用http_build_url
函数非常简单(需要PECL pecl_http> = 0.21.0)。
<?php
$url = 'http://example/forum/index.php?topic=53.msg251#msg251';
echo http_build_url($url, null, HTTP_URL_STRIP_FRAGMENT);
?>
答案 3 :(得分:-1)
“preg_match()返回模式匹配的次数。这将是 0次(不匹配)或1次因为preg_match()将停止 在第一场比赛后搜索。 preg_match_all()恰恰相反 继续,直到它到达主题的结尾。 preg_match()返回 如果发生错误,则为FALSE。“
Preg_Match仅检查字符串中是否存在模式。它不会删除某些东西。
您可以使用str_replace()替换该部分
$link = str_replace(".msg251#msg251", "", $linkraw);