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 に答える