preg_replace:替换使用%

时间:2010-03-07 23:47:52

标签: php regex preg-replace

我正在使用preg_replace函数,但我无法弄清楚如何使它工作,这个函数似乎对我不起作用。

我要做的是将字符串转换为链接,如果任何单词包含%(百分比)字符。

例如,如果我有字符串“go to%mysite”,我想将mysite单词转换为链接。 我试过以下......

$data = "go to %mysite";
$result = preg_replace('/(^|[\s\.\,\:\;]+)%([A-Za-z0-9]{1,64})/e', 
          '\\1%<a href=#>\\2</a>', $data);

......但它不起作用。

对此的任何帮助都将非常感激。

由于

1 个答案:

答案 0 :(得分:3)

这里的问题是e修饰符,它将替换值评估为php代码并因致命错误而失败


删除e属性将输出go to %<a href=#>mysite</a>,如果需要结果,则无需更改任何其他内容。

但我认为preg_replace_callback是你真正需要的,即:

function createLinks($matches)
{
    switch($matches[2])
    {
        case 'mysite':
            $url = 'http://mysite.com/';
            break;
        case 'google':
            $url = 'http://www.google.com/';
            break;
    }

    return "{$matches[1]}%<a href=\"{$url}\">{$matches[2]}</a>";
}

$data = "go to %mysite or visit %google";
$data = preg_replace_callback(
    '/(^|[\s\.\,\:\;]+)%([A-Za-z0-9]{1,64})/',
    'createLinks',
    $data
);

将导致go to %<a href="http://mysite.com/">mysite</a> or visit %<a href="http://www.google.com/">google</a>