13
Perché i due numeri stampati sono diversi?Sostituzione con stringa vuota: risultato inatteso
#!/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>";
uscita:
A: <110110110110111>
B: <11111111111>
Nota che ciò dimostra che \ Q \ E e l'interpolazione sono operazioni di stringa, non parte dell'espressione regolare vera e propria, poiché sono tutte risolte prima del test "modello valuta alla stringa vuota". Se vuoi veramente prevenire questa disfunzione e la tua regex consiste solo di bit interpolati che possono essere tutti vuoti, lancia un '(? #)' Che non ha alcun effetto sulla corrispondenza, ma rende il pattern non vuoto. – ysth