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

get substring in php with preg_match

我有如下字符串

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

我想使用 preg 替换,这样我的结果如下所示

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

因此,只要有方括号,我就需要将其替换为末尾包含冒号的文本。

如果 tect 表示 array-like 表示中的键:

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

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

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

这应该会给你一个 "[ 和第一个 : 之间的任何值。

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

演示:https://regex101.com/r/lI9yE8/1

PHP 用法:

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

输出:

["{apple}","{mango}","apple":, "apple:","{pear}" ]

PHP 演示:https://eval.in/498076

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

所以:

(.+?):

或保持原样:

(.+?:)

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