我有我认为会是一个简单的preg_replace但是导致我几个问题。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移动到一个新的 - 在[1]可在输入字符串中的任何位置
我遇到的问题是,这是输出
Thank you $(-1) for raiding us! Go follow him guys! twitch.tv/$()
,似乎是忽略了捕获组
编辑: 解决通过改变置换到
preg_replace('#\[(\d+)\]#', '\$(${1})', $output);
是U肯定吗?似乎工作[完美](http://ideone.com/qLdRPy) – DarkBee 2014-12-04 20:12:43
我很积极。我尝试了几种格式的变体,我无法让它输出捕获组中的数字。它在这里也很完美:http://www.phpliveregex.com/p/8BE 到目前为止的完整脚本可以在http://pastebin.com/hWvR6qfb 找到,因为我猜它可能是我的东西在这里做错了 编辑:没关系我只是检查你的例子,它的工作..我似乎错过了“#”。请回答你的例子,我会标记为完整:)(不是我明白'#'是什么:P – 2014-12-04 20:16:31
'#'只是[delimeters](http://php.net/manual/ en/regexp.reference.delimiters.php),它标志着RegEx的开始和结束。分隔符可以是任何非字母数字,非反斜杠,非空白字符,我只是更喜欢'#',大多数人倾向于使用'/' – DarkBee 2014-12-04 21:27:39