Php Preg_替换的行为与我预期的不一样

Php Preg_替换的行为与我预期的不一样,php,preg-replace,Php,Preg Replace,我有一个我认为是一个简单的preg_替换,但是它给我带来了一些问题 输入 谢谢你(-1)美元突袭我们!跟他走,伙计们!twitch.tv/[1] 更换 preg\u replace(“/\[(\d+)\]/”,“\$(${1})”,$output) 预期产量 谢谢你(-1)美元突袭我们!跟他走,伙计们!twitch.tv/$(1) 这样做的目的是从旧API移动到新API,[1]可以位于输入字符串中的任何位置 我遇到的问题是,这是输出 谢谢你(-1)美元突袭我们!跟他走,伙计们!twitch.tv

我有一个我认为是一个简单的preg_替换,但是它给我带来了一些问题

输入
谢谢你(-1)美元突袭我们!跟他走,伙计们!twitch.tv/[1]

更换
preg\u replace(“/\[(\d+)\]/”,“\$(${1})”,$output)

预期产量
谢谢你(-1)美元突袭我们!跟他走,伙计们!twitch.tv/$(1)

这样做的目的是从旧API移动到新API,[1]可以位于输入字符串中的任何位置

我遇到的问题是,这是输出
谢谢你(-1)美元突袭我们!跟他走,伙计们!twitch.tv/$()

而且似乎忽略了捕获组

编辑: 通过将替换更改为

preg\u replace(“\\[(\d+)\]\\”,“\$(${1})”,$output)

你几乎答对了。这就是我的工作:

$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");

你确定吗?看起来很有效,我很肯定。我尝试了几种不同的格式,但我无法让它从捕获组输出数字。它在这里也非常有效:到目前为止,完整的脚本可以在以下位置找到:我想可能是我在这里做错了编辑:没关系,我刚刚检查了你的示例,它很有效。。我好像错过了“#”这个词。请用您的例子回答,我将标记为完整:)(我不明白“#”是什么意思:p
只是,它标志着正则表达式的开始和结束。分隔符可以是任何非字母数字、非反斜杠、非空白字符,我更喜欢
,大多数人倾向于使用
//code>啊,这很有道理!preg\u替换用法中有很多修饰符因为我在括号和花括号里迷路了:D谢谢你的帮助!:)