3

次のような文字列があります。

Bla bla %yada yada% bla bla %yada yada%

次の出力を取得できるように、最初の 2 つの「%」(または最後の 2 つ) のみを置き換える方法はありますか。

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

また、必要に応じて、最後の 2 つの「%」が出力されるため、次のようになります。

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

最初の 2 つと最後の 2 つを区別する方法がわからないので、必要に応じて、最初または最後の 2 つのマーク「%」をリンクに置き換えることができます。私は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 に答える