Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Named capture backreferences cannot be used in character classes?

by kcott (Abbot)
on Sep 26, 2013 at 20:55 UTC ( #1055899=note: print w/ replies, xml ) Need Help??


in reply to Named capture backreferences cannot be used in character classes?

G'day BrowserUk,

You can use a postponed subexpression replacing [^\k<FQ>]+ with (??{"[^$+{FQ}]+"}). It's flagged as "experimental" - that may affect your choice to use it. Here's my test:

#!/usr/bin/env perl use 5.010; use strict; use warnings; my @test_strings = qw{""" "'" '"' ''' ""' "'' '"" ''"}; my $re = qr{ (?<FQ>"|') (??{ "[^$+{FQ}]+" }) \k<FQ> }x; for (@test_strings) { say "Testing [$_] : ", (/$re/ ? '' : 'no '), 'match.'; }

Output:

$ pm_re_kname_in_charclass.pl Testing ["""] : no match. Testing ["'"] : match. Testing ['"'] : match. Testing ['''] : no match. Testing [""'] : no match. Testing ["''] : no match. Testing ['""] : no match. Testing [''"] : no match.

-- Ken


Comment on Re: Named capture backreferences cannot be used in character classes?
Select or Download Code
Re^2: Named capture backreferences cannot be used in character classes?
by BrowserUk (Pope) on Sep 27, 2013 at 06:01 UTC
    You can use a postponed subexpression replacing It's flagged as "experimental" - that may affect your choice to use it.

    That would certainly work -- and I don't have a problem with it being "experimental"; as far as I have observed it hasn't changed in all the years it has been there and I'm already having to where I need recursive regex -- but I prefer to avoid it if there is a less performance sapping alternative.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      "... I don't have a problem with it being "experimental"; as far as I have observed it hasn't changed in all the years it has been there ..."

      When I read that this afternoon, that was my understanding too. However, poking aroung in perl5180delta some hours later (on a completely unrelated matter), I found: "/(?{})/ and /(??{})/ have been heavily reworked".

      That's really just an FYI, if you're interested. It's still marked "experimental" and I saw nothing to indicate any specific performance enhancements.

      -- Ken

        That's really just an FYI,

        Thanks for the heads up. I haven't moved onto 5.18 yet, but I will be doing so soon.

        Thankfully, my primary use of the feature is where I have regex elements that are codependent. EG.

        A => qr[...${B()}...], B => qr[...${C()}...], C => qr[...${A()}...],

        Which doesn't work because there is no way to order them such that all dependancies can be resolved at compile-time.

        Instead I have to use:

        A => qr[...(??{B()})...], B => qr[...(??{C()})...], C => qr[...(??{A()})...],

        Which doesn't seem to be affected by the changes.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.
      They changed at one point; IIRC it used to be something like (?p{...}); I think Ilya originally envisioned it as a limited scope version of a hypothetical qr/foo$bar/p that would at match time use the current value of $bar.

        Thanks for the information.

        According to anonymonks addendum, this all pre-dates my first use of Perl which started just a couple of weeks before I found this place in June, 2002.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1055899]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (7)
As of 2015-07-05 15:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls