PHP替换5个字符后以xxx开头以yyy结尾的字符串

PHP replace string starting with xxx and ending with yyy after 5 characters

输入:

$str = 'hi test1="12c4 ab3d" blablabla test1="5678 sdfg"'

所以我需要删除 5 个字符后 'test1="' 和 '"' 之间的字符串,例如:

'hi test1="12c4" blablabla test1="5678"'

我已经试过了:

$str= preg_replace('/test1="[\s\S]+?"/', 'test1=""', $str);

但我的输出是:

'hi test1="" blablabla test1=""'

您可以使用

$str = 'hi test1="12c4 ab3d" blablabla test1="abcd 3456 sdfs 2435"';
echo preg_replace('~\btest1="[^"\s]*\K[^"]+~', '', $str);
// => hi test1="12c4" blablabla test1="abcd"

参见PHP demo and the regex demo

详情:

  • \b - 单词边界
  • test1=" - 文字文本
  • [^"\s]* - 除空格和 "
  • 以外的零个或多个字符
  • \K - 匹配重置运算符,从匹配内存缓冲区中删除到目前为止匹配的文本
  • [^"]+ - ".
  • 以外的一个或多个字符

或者,不使用正则表达式并使用简单的 strpos()substr()

$str = 'hi test1="12c4 ab3d" blablabla test1="5678 sdfg"';

$find = 'test1=';
$p1 = stripos($str, $find) + strlen($find)+5;
$p2 = strripos($str, $find) + strlen($find)+5;

$new =  substr($str, 0, $p1) . substr($str, $p1+5, $p2-$p1-5) . substr($str, $p2+5);
echo $new . PHP_EOL;