我有一个这样的字符串:
$a="xxxGOODS yyyGOODS zzzGOODS"; //may be more GOODS
如何在第一个xxx
之前删除或替换所有字母(GOODS
,但并非总是如此)?
结果应为:
GOODS yyyGOODS zzzGOODS
或
some_other_lettersGOODS yyyGOODS zzzGOODS
答案 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