Hi Peter,

On 30.05.2014 22:39, Peter Schwenn wrote:
> Dear Moritz,
> $txt ~~ s:g/ <!before System> \. Guid  /.Moniker/;
> transforms (in $txt):    System.Guid -> System.Moniker
> i.e. the match succeeds.  So obviously I'm not understanding negative
> look-ahead correctly.  Where's there a good description of negative look
> ahead. 

The look-ahead looks *ahead*, that is, it matches because where the
regex matches '.Guid', the next token isn't 'System'.

So either write the look-ahead like this:

$txt ~~ s:g/ <!before System> « \w+ \. <( Guid /Moniker/;

(The <( limits where the substitution starts).

or use a look-behind:

s:g/ <!after 'System'> \. Guid /.Moniker/;

For a general introduction into look-araound assertions (and many other
regex topics) I can recommend "Mastering Regular Expressions" by Jeffrey
Friedl. It mostly uses Perl 5 regex syntax, but the concepts translate
well to Perl 6.


Reply via email to