use strict;
my $str = '16M2 - SIN - 49.000 KM - SENS - A/C - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d. - COD.PROD.RIC.: n.d. - NR.PLATE:
14I2 - OK - 20.000 KM - A/C - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d. - COD.PROD.RIC.: n.d. - NR.PLATE:
11A0 - SIN - 55.000 KM - SQUARE - SENS - A/C
16H0 - n.d. - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE:
14N1 - SIN - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE: - STEEL
16D2 - SIN - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE:
SX 100000 KM 15K2
SIN - 15D1
16P0 - OK - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE:
16H0 - SIN - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE:
16I1 SIN
14K1 - SIN - n.d. - FROM: - MATRIC.: n.d. - GEAR: n.d._n.d. marce - COD.PROD.RIC.: n.d. - NR.PLATE:
SX 14E2
SX 16D1 NO TURBO
SX 110000 KM 15M1
16O2 - SIN
15J1 - SIN
16L1 SIN DAMAGED
16P2 - SIN - DAMAGED
SX 15E2
SX 9D2
SIN - 130.000 KM - 16J1
OK 13A0
SX 16M0
OK 11A1
OK 12V1
SX 105CV 15P1
OK 105CV 15O2
14A2 - SIN
';
my $regex = qr/(^|\s+)(SIN|SX|RIC|OK)(\s+|$)/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