0

たとえば、次のデータがあります。

array(
    1 => 'Metallica',
    2 => 'Megadeth',
    3 => 'Anthrax',
    4 => 'Slayer',
    5 => 'Black Sabbath',
);

そして、私はこのテキストを持っています:

私の最初のお気に入りのバンドは#band{2}で、その後は#band1です。私の全体的な最初のメタル バンドは#band{5}で、時々 #band3または#band{4}を聴きながらヘッドバンを楽しんでいます。

したがって、正規表現の後は次のようになります。

私の最初のお気に入りのバンドはメガデスで、次はメタリカです。私の最初のメタル バンドは、 Black Sabbathでした。時々、 AnthraxSlayerを聴きながらヘッドバンを楽しんでいます。

したがって、これら2つのパターンから数値を抽出する方法のパターン/例が必要です:

#band{NUMERIC-ID}または#bandNUMERIC-ID

4

2 に答える 2

0

このようなことを試してください

$txt = 'your text with bands';
foreach($arr as $key=>$val){
    $txt = preg_replace('/#band'.$key.'([^0-9])/', $val.'$1', $txt);
    $txt = preg_replace('/#band{'.$key.'}/', $val.'$1', $txt);
}

//detect the error
if(preg_match('/#band[^0-9]+/', $txt) || preg_match('/#band{[^0-9]+}/', $txt){
  //error!!!
}

//replace the non found bands with a string
$txt = preg_replace('/#band[^0-9]+/', 'failsafe', $txt);
$txt = preg_replace('/#band{[^0-9]+}/', 'failsafe', $txt);
于 2012-04-10T00:45:57.643 に答える
0

正規表現は必要ありません。使用するだけstr_replace()です。

$map = array();
foreach ($bands as $k => $v){
    $map["#band".$k] = $v;
    $map["#band{".$k."}"] = $v;
}

$out = str_replace(array_keys($map), $map, $text);

デモ:http ://codepad.org/uPqGXGg6

正規表現を使用する場合:

$out = preg_replace_callback('!\#band((\d+)|(\{(\d+)\}))?!', 'replace_band', $text);

function replace_band($m){
    $band = $GLOBALS['bands'][$m[2].$m[4]];
    return $band ? $band : 'UNKNOWN BAND';
}

デモ:http ://codepad.org/2hNEqiCk

[編集]置換するトークンの複数の形式に合わせて更新

于 2012-04-10T00:49:13.090 に答える