使用 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"
没有冒号。如果找到的值不应该有冒号,则将 :
移到捕获组之外。您的替换字符串有两种情况,因此不清楚您想要什么。
所以:
(.+?):
或保持原样:
(.+?:)
()
捕捉里面的任何东西。
我有如下字符串
$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"
没有冒号。如果找到的值不应该有冒号,则将 :
移到捕获组之外。您的替换字符串有两种情况,因此不清楚您想要什么。
所以:
(.+?):
或保持原样:
(.+?:)
()
捕捉里面的任何东西。