3

我有一个看起来像这样的字符串:

布拉布拉%亚达亚达%布拉布拉%亚达亚达%

有没有办法只替换前两个“%”(或最后两个),这样我就可以获得下一个输出:

Bla bla <a href='link1'>yada yada</a> bla bla %yada yada%

并且,如有必要,最后两个“%”,因此它输出:

Bla bla <a href='link1'>yada yada</a> bla bla <a href='link2'>yada yada</a>

我不知道如何区分前两个和后两个,所以如果我愿意,我可以用链接替换第一个或最后两个标记“%”。我正在使用 php。提前致谢

问候

4

2 回答 2

3

使用正则表达式(需要 PHP 5.3+)

$string = 'Bla bla %yada yada% bla bla %yada yada%';
echo preg_replace('/%([^%]*)%/', '<a href="http://example.com">$1</a>', $string, 1) . '<br>'; // to replace the first instance.
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
$links = array('http://example.com', 'http://stackoverflow.com', 'http://google.com');
$index = 0;
echo preg_replace_callback('/%([^%]*)%/', function($m) use($links, &$index){
    $m[1] = '<a href="'.$links[$index].'">'.$m[1].'</a>';
    $index++;
    // reset the index if it exceeds (N links - 1)
    if($index >= count($links)){
        $index = 0;
    }
    return $m[1];
}, $string).'<br>'; // to replace according to your array
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //
// To test with a string that contains more %% than the links
$string2 = 'Bla bla %yada yada% bla bla %yada yada% wuuut dsfsf %yada yada% sjnfsf %yada yada% jnsfds';
$links = array('http://example.com', 'http://stackoverflow.com', 'http://google.com');
$index = 0;
echo preg_replace_callback('/%([^%]*)%/', function($m) use($links, &$index){
    $m[1] = '<a href="'.$links[$index].'">'.$m[1].'</a>';
    $index++;
    // reset the index if it exceeds (N links - 1)
    if($index >= count($links)){
        $index = 0;
    }
    return $m[1];
}, $string2).'<br>'; // to replace according to your array

在线演示

于 2013-04-24T08:06:01.363 回答
0

试试这个
对 PHP 4 和 PHP 5 的支持


解决方案:

$string ='Bla bla %yada yada% bla bla %yada yada%';

// Count no of %
$count = substr_count($string,'%');

// Valid string pattern
if ( 0 == ($count % 2) ) {

    $urlString = $string;

    // Iterate for each pair of % to make it link
    for ( $i=1; $i <= $count/2 ; $i++  ) {

        $urlString = preg_replace('/%/', "<a href='link$i'>", $urlString, 1);
        $urlString = preg_replace('/%/', "</a>", $urlString, 1);
    }
}
// Invalid string pattern
else {
    echo "Invalid string pattern";
}

// Display generated link 
echo $urlString;

preg_replace 函数的工作

  • 删除前两个 %
    $str ='Bla bla %yada yada% bla bla %yada yada%';
    $newStr = preg_replace('/%/', '', $str, 2);

    echo $newStr;

    // Output => Bla bla yada yada bla bla %yada yada%

  • 删除最后两个 %
    $str ='Bla bla %yada yada% bla bla %yada yada%';
    $newStr = preg_replace('/%/', '', strrev($str), 2);
    $newStr =  strrev($newStr);

    echo $newStr;

    // Output => Bla bla %yada yada% bla bla yada yada

  • 移除所有 %
    $str ='Bla bla %yada yada% bla bla %yada yada%';
    $newStr = preg_replace('/%/', '', $str);

    echo $newStr;

    // Output => Bla bla yada yada bla bla yada yada

参考
http://in1.php.net/preg%5Freplace

于 2013-04-24T08:03:56.337 回答