5

我想将此文本转换{unsubscribe|here.}<a href="">here.</a>.

我已经编写了获取不同匹配组的正则表达式。

在这种情况下,我知道我可以 preg/str_replace}文本的前面和结尾()但是这将是无效的,因为我还想删除另一个像这样的值{name},例如。

这是我写的正则表达式。/(\{unsubscribe\|)([a-z]*[^\}])(\})/

谢谢,

4

2 回答 2

2
$str = '{unsubscribe|{name} here.}';

function fix($m){
    return "<a href=''>".str_replace("{name}", "MY NAME", $m[1])."</a>";
}
print preg_replace_callback("/\{unsubscribe\|(.*)\}/", "fix", $str);

输出:

<a href=''>MY NAME here.</a>
于 2012-11-25T22:01:23.963 回答
1

这将去掉字符串的不同部分并在必要时进行替换。

我已经根据@waza123 的回答制定了这个解决方案。

$str = "Hi {name}, Some text {unsubscribe|here.} some more text.";

function fix($m){
    return $m[1] . str_replace($m[2], '<a href="">', $m[2]) . $m[3] . str_replace($m[4], '</a>', $m[4]) . $m[5];
}

$result = preg_replace_callback('/(.*)(\{unsubscribe\|)(.*[^\}])(\})(.*)/', 'fix', $str);

echo str_replace('{name}', 'Firstname Lastname', $result);

输出:

Hi Firstname Lastname, Some text <a href="">here.</a> some more text.
于 2012-11-25T23:50:53.613 回答