Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

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

by Kenosis (Priest)
on Jan 16, 2013 at 02:45 UTC ( #1013483=note: print w/ replies, xml ) Need Help??


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

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...


Comment on Re^3: Help combining two regex's into one
Select or Download Code
Re^4: Help combining two regex's into one
by LanX (Canon) on Jan 16, 2013 at 03:11 UTC
    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...

Re^4: Help combining two regex's into one
by AnomalousMonk (Abbot) on Jan 16, 2013 at 04:19 UTC

    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://1013483]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (12)
As of 2014-09-19 08:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (133 votes), past polls