Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^2: Help combining two regex's into one

by AnomalousMonk (Abbot)
on Jan 16, 2013 at 01:07 UTC ( #1013478=note: print w/ replies, xml ) Need Help??


in reply to Re: Help combining two regex's into one
in thread Help combining two regex's into one

The \K says to keep all to its left.

The  \K regex operator acutally functions to ignore everything to its left WRT the final match and only include or 'keep' text to its right. See discussion of  "(?<=pattern)" "\K" in the Look-Around Assertions section of perlre.


Comment on Re^2: Help combining two regex's into one
Select or Download Code
Re^3: Help combining two regex's into one
by Kenosis (Priest) on Jan 16, 2013 at 02:45 UTC

    From perlre:

    • "...\K , which causes the regex engine to "keep" everything it had matched prior to the \K..."
    • "\K [6] Keep the stuff left of the \K..."

    I suspect the K was not an accidental mnemonic device for its \Keeping operation...

      Just a matter of perspective: the left part which is kept unchanged is the one ignored from substitution, because the right part is kept in '$&'.

      So both parts are kept, just in different aspects.

      Almost as confusing as using single line and multi line modifiers at the same time...

      From perlre, identical in both Strawberry 5.14.2.1 local docs and 5.16.2 on-line docs (emphases added):

      • \K     [6]   Keep the stuff left of the \K, don't include it in $&
        (Note [6] simply refers to the discussion in the "Look-Around Assertions" section.)
      • From "Look-Around Assertions":
        There is a special form of this construct, called "\K", which causes the regex engine to "keep" everything it had matched prior to the "\K" and not include it in $&.

      Hmmm...   I suppose when I read these sections heretofore, my attention was drawn to the "don't include..." clauses and I more or less ignored the "left of" and "prior to" statements. My naive association of "keep" is with inclusion: in this specific instance, everything to the right of  \K is (or could be) included in $&. The docs seem to be using "keep" in the sense of "keep back", i.e., "to exclude": everything to the left of  \K is "kept back" from inclusion in $&. Perhaps they are discussing the behavior  \K in the context of substitution: everything left of the  \K is not included in $& and so cannot be zapped by substitution: it is "kept safe" from substitution. But  \K is equally valid and useful in both  m// matching and  s/// substitution, so...

      I can't say I would agree with the perhaps subtle interpretation given to "keep" in the documentation, but it is fully clarified by the "don't include" language and by the examples, so I doubt this qualifies as a doc-bug.

      Update: LanX: Almost as confusing like using single line and multi line modifier at the same time... ++That!

        ...everything left of the \K is not included in $& and so cannot be zapped by substitution: it is "kept safe" from substitution.

        Well said...

        Given this, I might read perlre as "Keep the stuff left of the \K, i.e., don't include it in $&". Put another way, if the stuff left of \K were included in $&, it wouldn't be kept--and I believe this is the essence of your quote above.

        Got a great laugh from your Update! Thanks for that...

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (7)
As of 2014-11-27 23:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (190 votes), past polls