Re: Need regex in the middle wildcard help
[email protected] (ToddAndMargo via perl6-users)
| Newsgroups | perl.perl6.users |
|---|---|
| Message-ID | <[email protected]> |
>> On 6/18/23 05:38, ToddAndMargo via perl6-users wrote: >>> Hi All, >>> >>> I know how to do this with several regex's and words. >>> What I'd like to learn is how to remove something >>> from the middle with regex using a wild card. >>> >>> And I can't figure it out >>> >>> >>> #!/bin/raku >>> >>> print "\n"; >>> my Str $x = Q[wine-7.12-3.fc37.i686.rpm</a> 23-Jul-2022 19:11 11K <a >>> href="wine-7.12-3.fc37.x86_64.rpm]; >>> print "1 [$x]\n\n"; >>> >>> $x~~s/ $( Q[</a>] ) * $( Q[a href="] ) / /; >>> print "2 [$x]\n\n"; >>> >>> >>> >>> 1 [wine-7.12-3.fc37.i686.rpm</a> 23-Jul-2022 19:11 11K <a >>> href="wine-7.12-3.fc37.x86_64.rpm] >>> >>> 2 [wine-7.12-3.fc37.i686.rpm</a> 23-Jul-2022 19:11 11K < >>> wine-7.12-3.fc37.x86_64.rpm] >>> >>> >>> >>> My goal is to have `2` print the following out >>> >>> wine-7.12-3.fc37.i686.rpm wine-7.12-3.fc37.x86_64.rpm >>> >>> >>> Many thanks, >>> -T > On 6/18/23 12:10, Joseph Brenner wrote: > References: <[email protected]> > > Try something like this, perhaps: > > $x ~~ s:i/ ^ (.*?) '</a>' .*? '<a href="' (.*?) $ /$0 $1/; > > Some explanations: > > s:i > > The :i modifier makes it case insensitive, so data with upper-case > html won't break things. > > In general, you want to break it down into chunks, and just keep the > chunks you want. > > ^ begin matching at the start of the string > > (.*?) match anything up to the next pattern, *and* capture it to a variable > > '...' I'm using single quotes on the literal strings > > $ match all the way to the end of the string. > > Pinning the match with ^ and $ means a s/// will replace the entire string. > > There are two captures, so they load $0 and $1, and here we're using > them in the replace string: s/.../$0 $1/ Hi Joseph, Right under my nose! Thank you. This is my test program: <RegexTest.pl6> #!/bin/raku print "\n"; my Str $x = Q[<a href="wike-2.0.1-1.fc38.noarch.rpm">wike-2.0.1-1.fc38.noarch.rpm</a> 27-Apr-2023 01:53 143K] ~ Q[<a href="wine-8.6-1.fc38.i686.rpm">wine-8.6-1.fc38.i686.rpm</a> 19-Apr-2023 21:48 11K] ~ Q[<a href="wine-8.6-1.fc38.x86_64.rpm">wine-8.6-1.fc38.x86_64.rpm</a> 19-Apr-2023 21:48 11K] ~ Q[<a href="wine-alsa-8.6-1.fc38.i686.rpm">wine-alsa-8.6-1.fc38.i686.rpm</a> 19-Apr-2023 21:48 223K]; $x~~m:i/ .*? ("wine") (.*?) $(Q[">] ) .*? $( Q[a href="] ) (.*?) ( $(Q[">] ) ) /; print "0 = <$0>\n1 = <$1>\n2 = <$2>\n\n"; my Str $y = $0 ~ $1 ~ " " ~ $2; print "$y\n\n"; </RegexTest.pl6> $ RegexTest.pl6 0 = <wine> 1 = <-8.6-1.fc38.i686.rpm> 2 = <wine-8.6-1.fc38.x86_64.rpm> wine-8.6-1.fc38.i686.rpm wine-8.6-1.fc38.x86_64.rpm An aside: /$0$1 $2/ did not work in (so I switched to "m") $x~~s:i/ .*? ("wine") (.*?) $(Q[">] ) .*? $( Q[a href="] ) (.*?) ( $(Q[">] ) ) /$0$1 $2/; The result is wine-8.6-1.fc38.i686.rpm wine-8.6-1.fc38.x86_64.rpmwine-8.6-1.fc38.x86_64.rpm</a> 19-Apr-2023 21:48 11K<a href="wine-alsa-8.6-1.fc38.i686.rpm">wine-alsa-8.6-1.fc38.i686.rpm</a> 19-Apr-2023 21:48 223K Is this a bug or did I write it wrong? -T