Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
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 examining the Monastery: (4)
As of 2014-08-31 08:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (294 votes), past polls