テキストファイル内の文字列「gotcha」のすべての出現箇所を、、などに(順番に)変換する必要がgotcha[1]ありgotcha[2]ますgotcha[3]。
単純な C++ プログラムでこれを簡単に行うことができますが、もっと簡単な方法があるかどうか疑問に思いました。テキスト エディターの正規表現置換が機能していないようです。少しサーフィンした後、Perl、sed、またはawkが適切なツールのように見えますが、私はそれらのどれにも精通していません.
テキストファイル内の文字列「gotcha」のすべての出現箇所を、、などに(順番に)変換する必要がgotcha[1]ありgotcha[2]ますgotcha[3]。
単純な C++ プログラムでこれを簡単に行うことができますが、もっと簡単な方法があるかどうか疑問に思いました。テキスト エディターの正規表現置換が機能していないようです。少しサーフィンした後、Perl、sed、またはawkが適切なツールのように見えますが、私はそれらのどれにも精通していません.
他の言語がこれをサポートしているかどうかはわかりませんが、PHP にはe修飾子があります。これはもちろん使用するのが悪く、最近の PHP バージョンでは推奨されていません。したがって、これはPHPのPOCです。
$string = 'gotcha wut gotcha wut gotcha wut gotcha PHP gotcha rocks gotcha !!!'; // a string o_o
$i = 0; // declaring a variable i which is 0
echo preg_replace('/gotcha/e', '"$0[".$i++."]"', $string);
/*
   + echo --> output the data
         + preg_replace() --> function to replace with a regex
                + /gotcha/e
                    ^     ^--- The e modifier (eval)
                    --- match "gotcha"
                + "$0[".$i++."]"
                  $0 => is the capturing group 0 which is "gotcha" in this case"
                  $i++ => increment i by one
                  Ofcourse, since this is PHP we have to enclose string
                 between quotes (like any language :p)
                 and concatenate with a point:  "$0["   .   $i++   .   "]"
                + $string should I explain ?
*/
そしてもちろん、SO を嫌う人がいることはわかっているので、e修飾子を使用せずにPHPでこれを行う正しい方法を紹介します。
$string = 'gotcha wut gotcha wut gotcha wut gotcha PHP gotcha rocks gotcha !!!';
$i = 0;
// This requires PHP 5.3+
echo preg_replace_callback('/gotcha/', function($m) use(&$i){
    return $m[0].'['.$i++.']';
}, $string);
Python では次のようになります。
import re
a = "gotcha x gotcha y gotcha z"
g = re.finditer("gotcha", a)
for i, m in reversed(list(enumerate(g))):
    k = m.end()
    a = '{}[{}]{}'.format(a[:k], i, a[k:])
print a
もちろん、すべてを 1 行に詰め込むこともできます (縦方向のスペースを節約するというより高い目的のために)。
パールでは:
$a = "gotcha x gotcha y gotcha z";
$i = -1; $a =~ s/(gotcha)/$i+=1;"gotcha[$i]"/ge;
print "$a\n";