如何在第一个指定单词之前替换所有字母?

时间:2015-10-11 14:45:29

标签: php string replace

我有一个这样的字符串:

$a="xxxGOODS yyyGOODS zzzGOODS"; //may be more GOODS

如何在第一个xxx之前删除或替换所有字母(GOODS,但并非总是如此)?

结果应为:

GOODS yyyGOODS zzzGOODS

some_other_lettersGOODS yyyGOODS zzzGOODS

3 个答案:

答案 0 :(得分:4)

如果用"字母"你的意思是字符,使用strstr

echo strstr($a, 'GOODS');

答案 1 :(得分:0)

这是你可以使用的正则表达式。

$a="xxxGOODS yyyGOODS zzzGOODS";
echo preg_replace('~^.*?(GOODS)~', '$1', $a) . "\n";
echo preg_replace('~^.*?(GOODS)~', 'some_other_letters$1', $a);

输出:

  

GOODS yyyGOODS zzzGOODS
  some_other_lettersGOODS yyyGOODS zzzGOODS

^标志着字符串
的开头 .是任何字符 *是一个量词,表示前一个字符的零个或多个(在这种情况下是任何字符)
?通过匹配下一个匹配*的第一次匹配(在这种情况下)来阻止GOODS贪婪。
()捕获值 替换值中的$1是捕获的内容 ~是分隔符,用于说明正则表达式的开始和结束位置。可以在结束分隔符后添加Modifiers以影响正则表达式的运行方式。例如,如果您还希望goods匹配,则可以通过在结束i之后添加~来使其不区分大小写。

Regex101演示:https://regex101.com/r/nD4iB1/1

答案 2 :(得分:-1)

你可以尝试这个:

$a = "xxxGOODS yyyGOODS zzzGOODS";
$b = str_replace('xxx', 'some_other_letters', $a);
echo $a;
echo '<br>';
echo $b;

OR

$a = 'xxxGOODS yyyGOODS zzzGOODS';
echo preg_replace('/xxx/', 'some_other_letters', $a, 1);

输出:

xxxGOODS yyyGOODS zzzGOODS
some_other_lettersGOODS yyyGOODS zzzGOODS