MasteringPerlの「AdvancedRegularExpresssion」の章に、良い修正がわからない壊れた例があります。この例は、おそらくそれ自体の利益のために賢くなりすぎようとしているのかもしれませんが、誰かが私のためにそれを修正できるかもしれません。修正作業のために、本の無料コピーが含まれている可能性があります。:)
ルックアラウンドについて説明しているセクションでは、ネガティブルックビハインドを使用して、小数部の数値のコミュニケートルーチンを実装したいと思いました。ポイントは、それがトピックだったので、ネガティブルックビハインドを使用することでした。
私は愚かにこれをしました:
$_ = '$1234.5678';
s/(?<!\.\d)(?<=\d)(?=(?:\d\d\d)+\b)/,/g; # $1,234.5678
は、の(?<!\.\d)
前のビット(?=(?:\d\d\d)+\b)
が小数点および数字ではないことを表明します。
愚かなことはそれを壊すのに十分な努力をしていません。最後に別の数字を追加することにより、小数点と数字が前に付いていない3桁のグループができます。
$_ = '$1234.56789';
s/(?<!\.\d)(?<=\d)(?=(?:\d\d\d)+\b)/,/g; # $1,234.56,789
Perlで後読みが可変幅である可能性がある場合、これは非常に簡単でした。しかし、彼らはできません。
ネガティブな裏返しなしでこれを行うのは簡単ですが、それは例のポイントではないことに注意してください。この例を救う方法はありますか?