Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:
I am trying to parse a file using the regex below. In the case of a failed match, what I would like to do is be able to determine how much of the string was matched before the regex engine gave up so that I can give a useful error message. But since 'pos' only gets set when there is a completed match, the code below will not do what I had hope it would. Do I have to break my regex into multiple pieces and use \G or is there a better way?
Thanks,
Jim
my $param_rx = '[^),]+'; my $list_start_rx = '\s*\(\s*'; my $list_end_rx = '\s*\)\s*'; $_ = $stmt; /^\s* (\S+) \s+ (\S+) $list_start_rx ($param_rx(?:\s*,\s*$param_rx)*)? $list_end_rx =\s* (?:0x)?\d+ \s*;\s*$ /cgxo; if (pos() != length($stmt)) { print "\n$stmt\n"; print ' ' x pos(); print "^<-- Parse failed here (column " . pos() . " of " . leng +th($stmt) . ")\n"; &error ($ARGV, $line_num, 'Exiting'); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Parsing with regular expressions
by Abigail-II (Bishop) on Jul 29, 2003 at 13:53 UTC | |
|
Re: Parsing with regular expressions
by halley (Prior) on Jul 29, 2003 at 13:53 UTC | |
|
Re: Parsing with regular expressions
by fletcher_the_dog (Friar) on Jul 29, 2003 at 16:18 UTC | |
|
Re: Parsing with regular expressions
by chunlou (Curate) on Jul 29, 2003 at 14:11 UTC |