在子串之后删除部分字符串

时间:2014-07-28 15:52:30

标签: php

这可能是一个骗局,但我似乎无法找到符合此问题的主题。我希望在给定的子字符串之后从字符串中删除所有字符 - 但字符串和子字符串后面的字符数是未知的。我发现的大多数解决方案似乎只能用于删除给定的子字符串本身或在给定的子字符串后删除固定长度。

我有

$str = preg_replace('(.gif*)','.gif$',$str);

哪个位于' blahblah.gif?12345'好吧,但我似乎无法删除子字符串后的字符' .gif'。我读到$表示EOS所以我认为这会起作用,但显然不行。我也试过

'.gif$/' 

简单地

'.gif'

4 个答案:

答案 0 :(得分:1)

可以在没有正则表达式的情况下完成:

echo substr('blahblah.gif?12345', strpos('blahblah.gif?12345', '.gif') + 4);
// returns ?12345                    this is the length of the substring ^

所以代码是:

$str = 'original string';
$match = 'matching string';
$output = substr($str, strpos($str, $match) + strlen($match));

好的,现在我不确定你是否要保留字符串的第一部分或第二部分。无论如何,这是保留第一部分的代码:

echo substr('blahblah.gif?12345', 0, strpos('blahblah.gif?12345', '.gif') + 4);
// returns blahblah.gif           ^ this is the key

完整代码:

$str = 'original string';
$match = 'matching string';
$output = substr($str, 0, strpos($str, $match) + strlen($match));

请参阅这两个示例:http://ideone.com/Ge30rY

答案 1 :(得分:1)

假设(来自OP's comment)您正在使用实际的URL作为源字符串,我相信这里最好的做法是使用PHP的内置功能来处理和使用解析URL。您可以使用parse_url() function

执行此操作
  

(PHP 4,PHP 5)
   parse_url - 解析网址并返回其组件

     

此函数解析URL并返回一个关联数组,其中包含存在的URL的各种组件。

     

此功能并不是为了验证给定的URL,而是将其分解为上面列出的部分。 也接受部分网址parse_url()尽力正确解析它们。

从您的示例中www.page.com/image.gif?123(甚至只是image.gif?123)使用parse_url()看起来像这样:

var_dump( parse_url( "www.page.com/image.gif?123" ) );

array(2) {
  ["path"]=>
  string(22) "www.page.com/image.gif"
  ["query"]=>
  string(3) "123"
}

正如您所看到的,我们不需要正则表达式或字符串操作,而是将URL分解为单独的组件。无需重新发明轮子。干净整洁:))

答案 2 :(得分:0)

你可以这样做:

$str = "somecontent.gif?anddata";
$pattern = ".gif";
echo strstr($str,$pattern,true).$pattern;

答案 3 :(得分:0)

// Set up string to search through
$haystack = "blahblah.gif?12345";

// Determine substring and length of it
$needle = ".gif";
$length = strlen($needle);

// Find position of last substring
$location = strrpos($haystack, $needle);

// Use location of last occurence + it's length to get new string
$newtext = substr($haystack, 0, $location+$length);