将双大括号占位符替换为方法调用作为 preg_replace() 的替换参数
我需要一些帮助来找出正则表达式。在我的脚本中,我有一行带有占位符。我想做的是向每个占位符文本发送一个函数,将其转换为应有的内容。
例如我的文字是:
Lorem ipsum dolor sat {{AMETPLACEHOLDER}}, consectetur adipiscing elit。
我希望将文本 AMETPLACEHOLDER 发送到我的函数 translateMe
。
我在正则表达式方面真的很糟糕,但无论如何还是尝试了一下。我没有比这更进一步的了:
$sString = preg_replace("(*.?)/\{{(*.?)}}(*.?)/", $this->echoText('\\2'), $sString);
这当然行不通。
I need some help figuring out an regular expression. In my script I have a certain line with placeholders. What I want to do is I want to send every placeholder text a an function that translates it to what it should be.
E.g. my text is:
Lorem ipsum dolor sit {{AMETPLACEHOLDER}},
consectetur adipiscing elit.
I want the text AMETPLACEHOLDER to be send of to my function translateMe
.
I am really bad in regex but gave it a try anyways. I don't get further than this:
$sString = preg_replace("(*.?)/\{{(*.?)}}(*.?)/", $this->echoText('\\2'), $sString);
Which off course doesn't work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 preg_replace_callback,你可以指定这样的方法:
方法可以是:
Btw,用于设计正则表达式检查out http://regular-expressions.info/ 或以下列出的一些工具: https://stackoverflow.com/questions/89718/is-there-开源世界中类似 regexbuddy 的任何东西
Using preg_replace_callback, you can specify a method like this:
And the method could be:
Btw, for designing regular expressions check out http://regular-expressions.info/ or some of the tools listed in: https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world
您需要使用
/e
修饰符来解析对eval
的替换,或者使用 preg_replace_callback()。例如。
但是
$this
会在那里引起问题,如果您使用的是 5.3+,您可以使用闭包创建一个函数来处理这个问题,或者创建一个回调:$this->echoText在这种情况下,必须修改 ()
以捕获匹配数组而不是字符串。或者使用匿名函数:
You need to use either the
/e
modifier to parse the replacement toeval
, or use preg_replace_callback().eg.
But the
$this
will cause problems there, if you are using 5.3+ you could use a closure to create a function to cope with that, or create a callback:$this->echoText()
would have to be modified to catch the match array rather than the string in that case.Or with an anonymous function: