使用preg_match在php中获取子字符串

使用preg_match在php中获取子字符串,php,regex,preg-replace,str-replace,Php,Regex,Preg Replace,Str Replace,我有一根像下面这样的线 $string = '["{apple}","{mango}","[apple: red]", "[apple: green]","{pear}" ]'; $string = '["{apple}","{mango}","apple:", "apple:","{pear}" ]'; 我想使用preg replace,这样我的结果如下所示 $string = '["{apple}","{mango}","[apple: red]", "[apple: green]","

我有一根像下面这样的线

$string = '["{apple}","{mango}","[apple: red]", "[apple: green]","{pear}" ]';
$string = '["{apple}","{mango}","apple:", "apple:","{pear}" ]';
我想使用preg replace,这样我的结果如下所示

$string = '["{apple}","{mango}","[apple: red]", "[apple: green]","{pear}" ]';
$string = '["{apple}","{mango}","apple:", "apple:","{pear}" ]';
因此,每当有方括号时,我都需要将其替换为结尾包含冒号的文本。

如果tect表示类似数组中的键表示:

$string = '["{apple}","{mango}","[apple: red]", "[apple: green]","{pear}" ]';

$string = preg_replace("/\[(\w+?\:) \w+?\]/","$1" , $string);

// $string now contains  "["{apple}","{mango}","apple:", "apple:","{pear}" ]"

这将为您提供介于
“[
和第一个
之间的任何内容

"\[(.+?):.*?\]"
演示:

PHP用法:

$string = '["{apple}","{mango}","[apple: red]", "[apple: green]","{pear}" ]';
echo preg_replace('/"\[(.+?:).*?\]"/', '"$1"', $string);
输出:

["{apple}","{mango}","apple":, "apple:","{pear}" ]
PHP演示:

在您的示例中,不清楚第二个
“apple”
为什么没有冒号。如果找到的值不应该有冒号,则将
移动到捕获组之外。您的替换字符串有两种情况,因此不清楚您想要什么

因此:

或者保持原样:

(.+?:)

()
捕获里面的任何东西。

一个带有打字错误的“文本”非常完美,但我需要苹果的双引号。输出应该是[“{apple}”、“芒果”、“苹果:”、“苹果:”、“{pear}”]编辑了缺少的问题:在第二个苹果之后,替换字符串只需要更新为
“$1”