最后删除所有内容的有效方法?来自字符串

时间:2014-11-19 05:27:02

标签: php regex

我试图删除后面的所有内容,并包含给定网址的最后?。我目前正在与preg_replace合作,但在完成目标方面没有运气。这是我用来挑出最后一个#\/[^?]*$#的正则表达式?。使用substr还有更快的方法吗?

示例链接:

preg_replace('#\/[^?]*$#', '', $post="www.exapmle.com?26sf213132aasdf1312sdf31")

期望输出

www.example.com

5 个答案:

答案 0 :(得分:2)

以下是使用substrstrrpos

的方法
$post = "www.exapmle.com?26sf213132aasdf1312sdf31";
$pos = strrpos($post, '?');
$result = substr($post, 0, $pos);

答案 1 :(得分:1)

在正则表达式的开头添加\?而不是\/

\?[^?]*$
  • \??

  • 相匹配
  • [^?]*$匹配?以外的任何内容,直到$

  • 锚定的字符串结尾为止

示例http://regex101.com/r/sW6jE7/3

$post="www.exapmle.com?26sf213132aasdf1312sdf31";
$res=preg_replace('/\?[^?]*$/', '', $post);
echo $res;

将提供输出

www.example.com

修改

如果你想从url中删除整个查询字符串,那么对regex进行轻微修改就可以完成这项工作

\?.*$

将删除任何后跟问号的内容

答案 2 :(得分:0)

只需匹配从开始到?符号的所有内容。

preg_match('/^[^?\n]*/', $post="www.exapmle.com?26sf213132aasdf1312sdf31", $match);
echo $match[0];

输出:

www.exapmle.com

答案 3 :(得分:0)

试试这个工作正常:

$host_url = "www.exapmle.com?26sf213132aasdf1312sdf31";
$part_url = strrpos($host_url, '?');
$result = substr($host_url, 0, $part_url);

echo $result;

答案 4 :(得分:0)

尽管OP标签正则表达式,但令人惊讶的是没有人建议explode(),这更容易。

$post = "www.exapmle.com?26sf213132aasdf1312sdf31";
$tokens = explode('?', $post);
echo $tokens[0]; // www.exapmle.com