use warnings; use strict; use Data::Dump qw(pp); print "perl version $] \n\n"; for my $line ( "\"quoted text\" \cM\cJ", "\"quoted_text\" \cM\cJ", "\"quoted-text\" \cM\cJ" ) { print 'line: ', pp($line), "\n"; my @ra; @ra = $line =~ m/^(\s*)((?'quote'"?)[^\s"]*\g{quote})\s+(\[[^\]]*\]|)\s*$/; print 'rx 1: ', pp(\@ra), "\n"; @ra = $line =~ m/^(\s*)((?'quote'"?)[^\s"]*")\s+(\[[^\]]*\]|)\s*$/; print 'rx 2: ', pp(\@ra), "\n"; @ra = $line =~ m/^(\s*)(("?)[^\s"]*")\s+(\[[^\]]*\]|)\s*$/; print 'rx 3: ', pp(\@ra), "\n"; @ra = $line =~ m/^(\s*)("?[^\s"]*")\s+(\[[^\]]*\]|)\s*$/; print 'rx 4: ', pp(\@ra), "\n"; } #### c:\@Work\Perl\monks\Ach>perl regex_problem_1.pl perl version 5.014004 line: "\"quoted text\" \r\n" rx 1: [] rx 2: [] rx 3: [] rx 4: [] line: "\"quoted_text\" \r\n" rx 1: ["", "\"quoted_text\"", "\"", ""] rx 2: ["", "\"quoted_text\"", "\"", ""] rx 3: ["", "\"quoted_text\"", "\"", ""] rx 4: ["", "\"quoted_text\"", ""] line: "\"quoted-text\" \r\n" rx 1: ["", "\"quoted-text\"", "\"", ""] rx 2: ["", "\"quoted-text\"", "\"", ""] rx 3: ["", "\"quoted-text\"", "\"", ""] rx 4: ["", "\"quoted-text\"", ""]