1

PHP を使用preg_replace()して、特定の単語の出現をテキストで検索し、その単語を角かっこで囲みます (角かっこが既に存在しない限り)。ここでの課題は、探しているテキストに直接隣接している場合と隣接していない場合がある括弧をテストしたいということです。

warfarinランダムな例:と置き換えたい[[warfarin]]

  1. この文字列で:Use warfarin for the prevention of strokes
  2. ただし、この文字列にはありません: Use [[warfarin]] for the prevention of strokes(括弧は既に存在します)
  3. この文字列にもありません: Use [[generic warfarin formulation]] for the prevention of strokes(「リモート」ブラケットは既に存在します)

後読みアサーションと先読みアサーションを使用して、最初の 2 つの要件をすべて満たすことができます。

php > echo preg_replace( "/(?<!\[\[)(warfarin)(?!]])/", "[[$1]]", "Use warfarin for the prevention of strokes" );
Use [[warfarin]] for the prevention of strokes
php > echo preg_replace( "/(?<!\[\[)(warfarin)(?!]])/", "[[$1]]", "Use [[warfarin]] for the prevention of strokes" );
Use [[warfarin]] for the prevention of strokes

しかし、3 番目の要件、つまり「リモート」ブラケットが存在する場合にブラケットを追加しないことについては、あなたの助けが必要です。

php > echo preg_replace( "/(?<!\[\[)(warfarin)(?!]])/", "[[$1]]", "Use [[generic warfarin formulation]] for the prevention of strokes" );
Use [[generic [[warfarin]] formulation]] for the prevention of strokes

この最後の例では、単語に角かっこを追加しないwarfarinでください。これは、既に角かっこで囲まれている長い式に含まれているためです。

問題は、PHP の正規表現アサーションが固定長でなければならないことです。そうしないと、非常に単純になってしまいます。

私は使用しています

PHP 5.3.10-1ubuntu3.1 with Suhosin-Patch (cli) (built: May  4 2012 02:20:36)

前もって感謝します!

4

2 に答える 2

2

これが私がすることです。

$str = 'Use warfarin for the prevention of strokes. ';
$str .= 'Use [[warfarin]] for the prevention of strokes. ';
$str .= 'Use [[generic warfarin formulation]] for the prevention of strokes';
$arr = preg_split('/(\[\[.*?\]\])/',$str,-1,PREG_SPLIT_DELIM_CAPTURE);
// split the string by [[...]] groups
for ($i = 0; $i < count($arr); $i+=2) {
    // even indexes will give plain text parts
    $arr[$i] = preg_replace('/(warfarin)/i','[[$1]]',$arr[$i]);
    // enclose necessary ones by double brackets
}
echo '<h3>Original:</h3>' . $str;
$str = implode('',$arr); // finally join them
echo '<h3>Changed:</h3>' . $str;

結果として

オリジナル:

脳卒中の予防にはワーファリンを使用してください。脳卒中の予防には【ワルファリン】を使用してください。脳卒中予防には【ジェネリックワルファリン製剤】を使用

かわった:

脳卒中の予防には【ワルファリン】を使用してください。脳卒中の予防には【ワルファリン】を使用してください。脳卒中予防には【ジェネリックワルファリン製剤】を使用

于 2012-05-20T09:54:55.680 に答える
1

これを試して:

echo preg_replace( "/(warfarin)([^\]]+(\[|$))/", "[[$1]]$2", "Use generic warfarin[[ formulation for]] the prevention of strokes\n" );

開き括弧なしで閉じ括弧の場合はないと思います。

于 2012-05-20T09:54:10.970 に答える