PHP を使用preg_replace()
して、特定の単語の出現をテキストで検索し、その単語を角かっこで囲みます (角かっこが既に存在しない限り)。ここでの課題は、探しているテキストに直接隣接している場合と隣接していない場合がある括弧をテストしたいということです。
warfarin
ランダムな例:と置き換えたい[[warfarin]]
- この文字列で:
Use warfarin for the prevention of strokes
- ただし、この文字列にはありません:
Use [[warfarin]] for the prevention of strokes
(括弧は既に存在します) - この文字列にもありません:
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)
前もって感謝します!