我需要一些帮助来找出正则表达式。在我的脚本中,我有一行带有占位符。我想做的是向每个占位符文本发送一个函数,将其转换为应有的内容。
例如我的文字是:
Lorem ipsum dolor 坐 {{AMETPLACEHOLDER}}, consectetur adipiscing elit.
我希望将文本 AMETPLACEHOLDER 发送到我的函数
translateMe
。
我在正则表达式方面真的很糟糕,但无论如何还是尝试了一下。我没有比这更进一步了:
$sString = preg_replace("(*.?)/\{{(*.?)}}(*.?)/", $this->echoText('\\2'), $sString);
这当然行不通。
使用preg_replace_callback,你可以指定这样的方法:
= preg_replace_callback("@{{(.*?)}}@", array($this, "echoText"), $txt)
方法可以是:
public function echoText($match) {
list($original, $placeholder) = $match; // extract match groups
...
return $translated;
}
顺便说一句,要设计正则表达式,请查看 http://regular-expressions.info/ 或以下列出的一些工具:https://stackoverflow.com/questions/89718/is-there-anything-like-开源世界中的 regexbuddy
您需要使用
/e
修饰符将替换解析为 eval
,或者使用 preg_replace_callback()。
例如。
$sString = preg_replace("#\{\{(*.?)\}\}#e", 'echoText("$2")', $sString);
但是
$this
会导致问题,如果你使用的是 5.3+,你可以使用闭包创建一个函数来处理这个问题,或者创建一个回调:
$sString = preg_replace_callback("#\{\{(*.?)\}\}#", array($this, 'echoText'), $sString);
在这种情况下,必须修改 $this->echoText()
才能捕获匹配数组而不是字符串。
或者使用匿名函数:
$sString = preg_replace_callback("#\{\{(*.?)\}\}#", function ($matches) {
return $this->echoText($matches[1]);
}, $sString);