use strict;
my $str = 'Date commandée Date de facture Commandé par Expédié par Votre numéro de commande
04-OCT-2022 05-DÉC-2022 LIVRE DIRECT 786q23teqwuye
Date d\'expédition No. de compte No. Commis Notre No. commande
No. livraison manuel
05-DÉC-2022 358 MIB 21q24242456013
Quantité
Prix
No. Produit Description Escompte Montant
Commandé Livré unitaire
Souffrance
e e
32_SSL-
PNI SSL-LH/480/20/40/287/DC/D 112 112 $73211.4800 8,022.44
LHB3/170/40/120/3
32_SSL- PNI AlloCie SSL-
6 6 $2.2700 17.48
LHB3/LV2/12V/CO LHB3/LV2/12V/CONTROLLER2
32_SSL-
PNI AlloCie SSL-LH/LV/90V/SEN3erw2 175 175 $3.1100 4,044.25
LH/LV/90V/SEN
livrer direct ref: s245354-5235
SOUS-TOTAL $1,041.31
TRANSPORT $0.00
FRAIS DIVERS $0.00
T.P.S. $151.07
T.V.Q. $296.38
';
my $regex = qr/(^ (?<Desc>[\s\S]*?) (?<QteComm>(?:[0-9]+)) (?<QteRecu>(?:[0-9]+)) (?<QteBO>(?:[0-9]*)) [$](?<PrixUnitaireF>(?:[0-9]+)\.(?:[0-9]+))[\s]+(?:(?<Escompte>(?:[0-9]+).(?:[0-9,]+)) %)?[\s]+(?<total_item>(?:[0-9]*[,]?[0-9]+)\.(?:[0-9]+))[\s]+[\r\n|\r|\n])/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html