我有这个:
$tagName = "id";
$value = "ID12345";
$text = "<%id%> some text <%id%> something";
$a = new A();
echo $a->replaceAllTags($tagName, $value, $text);
我想创建这个:
"ID12345 some text ID12345 something"
试过这个但没有工作:
private function replaceAllTags($tagName, $value, $text)
{
$pattern = "/<%" . $tagName . "%>/";
while (preg_match($pattern, $text)) {
$text = preg_replace($pattern, $value, $text);
}
return $text;
}
这也不起作用:
private function replaceAllTags($tagName, $value, $text)
{
$pattern = "/<%(" . $tagName . ")%>/";
$text = preg_replace_callback($pattern,
function($m) {
return $value;
}, $text);
return $text;
}
我搜索了很多,但没有解决我的问题。
EDITED: 问题是我写了一个PHPUnit测试并且&lt;%id&gt;而不是&lt;%id%&gt;。
P.s:私人应该公开
答案 0 :(得分:1)
除了真正需要正则表达式之外,在我看来问题在于“私人”可见性。您想从外部访问的方法需要“公共”可见性。
答案 1 :(得分:1)
如果您想使用正则表达式 - 请尝试使用此代码段。
class A {
public function replaceAllTags($tagName, $value, $text) {
$pattern = "/<%(" . $tagName . ")%>/";
$text = preg_replace($pattern, $value, $text);
return $text;
}
}
我建议你使用简单的str_replace。像这样:
public function replaceAllTags($tagName, $value, $text) {
$pattern = "<%" . $tagName . "%>";
$text = str_replace($pattern, $value, $text);
return $text;
}
答案 2 :(得分:0)
您应该使用str_replace代替。
private function replaceAllTags($tagName, $value, $text)
{
$pattern = "<%" . $tagName . "%>";
$text = str_replace($pattern, $value, $text);
return $text;
}
答案 3 :(得分:0)
这对我来说很好用但是试试看:
<?php
function replaceAllTags($tagName, $value, $text)
{
$pattern = "/(<%)(" . $tagName . ")(%>)/";
while (preg_match($pattern, $text)) {
$text = preg_replace($pattern, $value, $text);
}
return $text;
}
$tagName = "id";
$value = "ID12345";
$text = "<%id%> some text <%id%> something";
echo replaceAllTags($tagName, $value, $text);
?>
结果是: ID12345一些文字ID12345
答案 4 :(得分:0)
任何功能都没有错!请记住,您的函数是私有函数,只能使用该类访问!