В главе «Расширенное регулярное выражение» в Освоение Perl у меня есть неработающий пример, для которого я не могу найти хорошее исправление. Возможно, пример пытается быть слишком умным для своего блага, но, возможно, кто-то может это исправить для меня. В ней может быть бесплатная копия книги для исправлений. :)
В разделе, посвященном поиску обходных путей, я хотел использовать отрицательный взгляд назад для реализации подпрограммы-компилятора для чисел с дробными порциями. Смысл в том, чтобы использовать отрицательный взгляд назад, потому что это была тема.
Я тупо сделал это:
$_ = '$1234.5678';
s/(?<!\.\d)(?<=\d)(?=(?:\d\d\d)+\b)/,/g; # $1,234.5678
(?<!\.\d)
утверждает, что бит перед (?=(?:\d\d\d)+\b)
не является десятичной точкой и цифрой.
Глупый человек недостаточно старается сломать его. Добавив еще одну цифру в конец, теперь есть группа из трех цифр, которой не предшествуют десятичная точка и цифра:
$_ = '$1234.56789';
s/(?<!\.\d)(?<=\d)(?=(?:\d\d\d)+\b)/,/g; # $1,234.56,789
Если бы lookbehinds мог иметь переменную ширину в Perl, это было бы действительно легко. Но они не могут.
Обратите внимание, что это легко сделать без негативного взгляда, но дело не в этом. Есть ли способ спасти этот пример?