Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何替换第一个指定单词前的所有字母?_Php_String_Replace - Fatal编程技术网

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

Php 如何替换第一个指定单词前的所有字母?,php,string,replace,Php,String,Replace,我有这样一个字符串: $a="xxxGOODS yyyGOODS zzzGOODS"; //may be more GOODS 我如何删除或替换第一批货物之前的所有字母(xxx,在这种情况下,但不总是如此) 结果应该是: GOODS yyyGOODS zzzGOODS 或 你可以试试这个: $a = "xxxGOODS yyyGOODS zzzGOODS"; $b = str_replace('xxx', 'some_other_letters', $a); echo $a; echo '&

我有这样一个字符串:

$a="xxxGOODS yyyGOODS zzzGOODS"; //may be more GOODS
我如何删除或替换第一批
货物之前的所有字母(
xxx
,在这种情况下,但不总是如此)

结果应该是:

GOODS yyyGOODS zzzGOODS

你可以试试这个:

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

xxxGOODS yyyGOODS zzzGOODS
some_other_lettersGOODS yyyGOODS zzzGOODS
如果“字母”是指字符,请使用:


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

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

xxxGOODS yyyGOODS zzzGOODS
some_other_lettersGOODS yyyGOODS zzzGOODS
货物YYYY货物ZZG货物
一些其他字母货物YYYYZZG货物

^
标记字符串的开头
是任意字符
*
是一个量词,表示前一个字符(在本例中为任何字符)的零个或多个
通过匹配下一个匹配的
商品的第一次出现来阻止
*
贪婪(在这种情况下)。
()
捕获值。
替换值中的
$1
是捕获的值。
~
是分隔符,指示正则表达式的开始和结束位置。可以在结束分隔符之后添加,以影响正则表达式的工作方式。例如,如果您还希望
商品
匹配,可以通过在关闭
~
后添加
i
使其不区分大小写


Regex101演示:

使用类似regex的
^(.*)GOODS
;)。你有什么问题吗?试过什么吗?我以前试过preg_replace(“/^(.*?)GOODS/”,“,$a),但它可以代替所有。现在我使用preg_replace(“/^(.*?)(货物)/”、“$2”、$a),它可以工作了!您不需要先捕获组。请看我的答案,它应该会为您提供更多关于发生了什么的信息。
str_replace
默认情况下会替换所有实例,而问题是只替换第一个实例。您需要向调用传递第四个参数,告诉它只替换第一个实例。如Casimir所示,此任务不需要正则表达式。如Casimir所示,此任务不需要正则表达式。
echo strstr($a, 'GOODS');
$a="xxxGOODS yyyGOODS zzzGOODS";
echo preg_replace('~^.*?(GOODS)~', '$1', $a) . "\n";
echo preg_replace('~^.*?(GOODS)~', 'some_other_letters$1', $a);