> On Oct 23, 2021, at 6:43 PM, ToddAndMargo via perl6-users 
> <perl6-us...@perl.org> wrote:
> 
> Hi All,
> 
> Wish I had a Q[;;;] expression inside a regex, but I don't
> 
> This is my notes on how to do a regex with a special
> characters in it:
> 
>     Regex with literals in it:
>        $JsonAddr ~~ s| (';') .* ||;
> 
> It "usually" works.
> 
> 
> Unfortunately this one hangs my program (I am slicing
> up a web page):
> 
> $NewRev ~~ s/ .*? ('Release Notes <strong>V') //;
> 
> I need a better way of doing the above.
> 
> Many thanks,
> -T
> 
> 

Just anchor the start of the pattern, using `^` :
        $NewRev ~~ s/ ^ .*? ('Release Notes <strong>V') //;


In the code below:
    * Target_V is matched by the original pattern, at high speed.
    * Target_V is matched by the anchored pattern, at high speed.
    * Target_Z hangs the original pattern.
    * Target_Z is correctly fails at match the anchored pattern, at high speed.

my $target_V = 'Release Notes <strong>V';       # Will     match pattern(s) 
below
my $target_Z = 'Release Notes <strong>Z';       # Will not match pattern(s) 
below

# Uncomment one of these two lines:
my $target = $target_V;
# my $target = $target_Z;

# Simulate a big HTML page:
my $NewRev = ('abcdefghijklmnopqrstuvwxyz' x 100) ~ $target
           ~ ('ABCDEFGHIJKLMNOPQRSTUVWXYZ' x 100) ~ $target
           ~ ('12345678901234567890123456' x 100);


# Uncomment one of these two lines:
$NewRev ~~ s/   .*? ('Release Notes <strong>V') //; # Original
# $NewRev ~~ s/ ^ .*? ('Release Notes <strong>V') //; # Anchored

-- 
Hope this helps,
Bruce Gray (Util of PerlMonks)

Reply via email to