http://www.perlmonks.org?node_id=763890


in reply to Regexp matching words, not doing what I expect

$_ = "hello to all the perl monks"; /\b(([A-Za-z'\-]+) (?-1))\b(?{ say $1 })(*FAIL)/; __END__ hello to to all all the the perl perl monks

Replies are listed 'Best First'.
Re^2: Regexp matching words, not doing what I expect
by AnomalousMonk (Archbishop) on May 13, 2009 at 19:59 UTC
    Or without the extended regex features of 5.10 (basically moritz's approach, but with only one capture):
    >perl -wMstrict -le "my $text = q{hello to 'all' this perl-monk's friends}; my $wchar = qr{ [A-Za-z'-] }xms; my $word = qr{ (?<! $wchar) $wchar+ }xms; while ($text =~ m{ (?= ($word \s+ $word)) }xmsg) { print $1 } " hello to to 'all' 'all' this this perl-monk's perl-monk's friends
      The 5.10 features can easily be avoided: the (?-1) can be replaced by just copying the [A-Za-z'-] part, and the (*FAIL) can be replaced with (?!).