preg_replace 在替换之前通过函数传递匹配

发布于 2024-08-26 21:49:39 字数 333 浏览 3 评论 0原文

这就是我想要做的:

$line = 'blabla translate("test") blabla';
$line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line);

所以结果应该是 translate("test") 被替换为 "test" 的翻译。

问题在于,translate("$2") 将字符串“$2”传递给翻译函数。因此,translate() 尝试翻译“$2”而不是“test”。

有没有办法在替换之前将匹配的值传递给函数?

This is what i want to do:

$line = 'blabla translate("test") blabla';
$line = preg_replace("/(.*?)translate\((.*?)\)(.*?)/","$1".translate("$2")."$3",$line);

So the result should be that translate("test") is replaced with the translation of "test".

The problem is that translate("$2") passes the string "$2" to the translate function. So translate() tries to translate "$2" instead of "test".

Is there some way to pass the value of the match to a function before replacing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云仙小弟 2024-09-02 21:49:39

preg_replace_callback 是你的朋友

  function translate($m) {
     $x = process $m[1];
     return $x;
  }

  $line = preg_replace_callback("/translate\((.*?)\)/", 'translate', $line);

preg_replace_callback is your friend

  function translate($m) {
     $x = process $m[1];
     return $x;
  }

  $line = preg_replace_callback("/translate\((.*?)\)/", 'translate', $line);
跨年 2024-09-02 21:49:39

您可以将 preg_replace_callback 函数用作:

$line = 'blabla translate("test") blabla';
$line = preg_replace_callback("/(.*?)translate\((.*?)\)(.*?)/",fun,$line);

function fun($matches) {    
 return $matches[1].translate($matches[2]).$matches[3];    
}

You can use the preg_replace_callback function as:

$line = 'blabla translate("test") blabla';
$line = preg_replace_callback("/(.*?)translate\((.*?)\)(.*?)/",fun,$line);

function fun($matches) {    
 return $matches[1].translate($matches[2]).$matches[3];    
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文