#!/usr/bin/perl -w use strict; use Parse::RecDescent; my $grammar = join( '', ); my $parser = Parse::RecDescent->new( $grammar ) or die "Error: Bad grammar\n"; my $text =<< "SUB_STDIN"; A nicely [[spaced]] link. A poorly[[spaced]]link. Another poorly..[[spaced]]..link. A harder problem [spaced] link. Yet harder still..]]spaced[[..link. The real problem is [[spaced]] followed by ]] or [[ link. SUB_STDIN my $results = $parser->startrule( $text ) or die "Error: Bad text\n"; __DATA__ startrule: bit(s) bit: eol | word | space | token | punct eol: /\n[ \t]*/ {print "\n" } space: /[ \t]+/ {print "< >" } word: /[\w\']+/ {print "" } punct: /[^\w\s\[\]]+/ {print "" } | /(?" } | /(?" } | /(?" } | /(?" } token: link link: /\[\[(.+?)\]\]/ {print "" }