我认为这是一个简单的preg_replace,但却引起了一些问题。
输入
Thank you $(-1) for raiding us! Go follow him guys! twitch.tv/[1]
替换
preg_replace("/\[(\d+)\]/", "\$(${1})", $output);
预期输出
Thank you $(-1) for raiding us! Go follow him guys! twitch.tv/$(1)
这样做的目的是从旧的API转移到新的API - [1]可以在输入字符串中的任何位置
我遇到的问题是这是输出
Thank you $(-1) for raiding us! Go follow him guys! twitch.tv/$()
并且似乎忽略了捕获组
编辑:
通过将替换更改为
来解决
preg_replace('#\[(\d+)\]#', '\$(${1})', $output);
答案 0 :(得分:1)
你几乎做对了。这对我来说很重要:
$output = 'Thank you $(-1) for raiding us! Go follow him guys! twitch.tv/[1]';
$new_output = preg_replace("/\[(\d+)\]/", "\$($1)", $output);
print($new_output."\n");
使用大括号,您可以插入一个PHP变量,并将其与替换文本分开,如此
$php_var = 'replacement';
$output = 'Thank you $(-1) for raiding us! Go follow him guys! twitch.tv/[1]';
$new_output = preg_replace("/\[(\d+)\]/", "\$(${php_var}_and_then_some)", $output);
print($new_output."\n");