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;
输入:
$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;