13
2つの数字が異なるのはなぜですか?空の文字列による置換:予期しない結果
#!/usr/bin/env perl
use warnings;
use 5.10.1;
my $sep = '';
my $number = 110110110110111;
$number =~ s/(\d)(?=(?:\d{3})+\b)/$1$sep/g;
say "A: <$number>";
$number =~ s/\Q$sep\E//g;
say "B: <$number>";
出力:
A: <110110110110111>
B: <11111111111>
これは\ Q \ Eと補間が正規表現の一部ではなく文字列演算であることを示していることに注意してください。 "パターンが空文字列に評価される"テストの前にすべて解決されるからです。本当にこの誤った形を防ぐために、あなたの正規表現は空であるかもしれない補間されたビットだけで構成されていれば、 '(?#)'を入れてもマッチングに影響はありませんが、パターンは空ではありません。 – ysth