On 10/23/21 17:37, Bruce Gray wrote:
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
Hi Bruce,
I did fix the hang. I was accidentally feeding the
regex a nul string.
I am not understanding what you mean by "anchor"
-T