Perl 6 Regex
Perl 6 Data Structures
Schlaraffenland
Heiliger Gral
Schönheit Und Struktur
Voll Gepackt
Voll Gepackt
Vorsicht Denglisch !
Voll Gepackt
Keine Sorge



:Perl5
Modifikator am Anfang




  m :P5 //
Alles wie bei Mama
Papa says




We put the ”regular”
back into expression.
Was bleibt ?
Was bleibt ?
  Capturing: (…) Escape: 
      Modifikatoren: i, g
    Quantifier: *, +, und ?
        Alternativen: |
        match Var.: $/
min. matching Suffix: ??, *?, +?
Vorsicht Falle
Vorsicht Falle


   . /smex

   [-]    //
Any Char



   .
Any Char

N ist der alte .
Any Char

N ist der alte .

Gegenteil von n
Any Char

N ist der neue .

Gegenteil von n

   seit 5.12
Any Char

   N ist der alte .

Punkt meint ”any char”
Any Char
Any Char
Any Char
Kein ”multi line mode”

   kein /.../s und /.../m
Kein ”multi line mode”

   kein /.../s und /.../m

        ^       ^^
Kein ”multi line mode”

   kein /.../s und /.../m

        ^       ^^

        $       $$
Leerzeichen

immer noch s
Leerzeichen

immer noch s

  h | v
Leerzeichen

    immer noch s

        h | v

horizontal | vertikal
Leerzeichen

    immer noch s

       h | v

horizontal = leer + tabs
Oder oder oder?

    |     ||
Oder oder oder?

     |       ||

  'sub' | 'substr'
Oder oder oder?

     |       ||

  'sub' | 'substr'

 'substr' gewinnt
Oder oder oder?

     |      ||

 'sub' || 'substr'
Oder oder oder?

     |      ||

 'sub' || 'substr'

  'sub' gewinnt
Regex Metachar

 ^ ^^ $ $$ | || &

   . ** % %%

 := # (+Klammern)
Regex Metachar

 ^ ^^ $ $$ | || &

   . ** % %%

 := # (+Klammern)
Regex Metachar

 ^ ^^ $ $$ | || &

   . ** % %%

 := # (+Klammern)
Regex Metachar

 ^ ^^ $ $$ | || &

   . ** % %%

 := # (+Klammern)
Quantifikatoren

?   +   *    ** **?

        **

    %       %%
Quantifikator **


'243' ~~ /d ** 2/
Quantifikator **


'243' ~~ /d ** 2/

  default to *
Quantifikator **


 '243' ~~ /d ** 2/

'243' ~~ /d ** 2..4/
Quantifikator %


'3,4,5' ~~ /d+ % ','/
Quantifikator %%


'3,4,5' ~~ /d+ % ','/

'3,4,5,' ~~ /d+ %% ','/
Kein ”eval mode”

   P5: s/.../.../e
Kein ”eval mode”

   P5: s/.../.../e

   P6: s/.../{...}/
Kein ”eval mode”

   P5: s/.../.../e

   P6: s/.../{...}/

   s[...] = {…};
Kein ”eval mode”

   P5: s/.../.../ee

 P6: s/.../{ eval ...}/

  s[...] = eval {…};
Perl 6 Regex

  kein /.../x
Perl 6 Regex

  kein /.../x

 ist Standard
Eigene Zeichenklasse

      P5: [a-m]
Eigene Zeichenklasse

      P5: [a-m]

     P6: <[a m]>]
Bereiche Wie Überall

      P5: [a-m]

     P6: <[a..m]>]
Klammern in Regex



Zeichenklasse <[..]>]

     Block {..}
Klammern in Regex

Teilregex (..), [..], <...>

 Zeichenklasse <[..]>]

        Block {..}
Klammern in Regex

 (?:pattern) => [pattern]
(?<key>pattern)
       => $<key> = <pattern>

   (?{code}) => {code}
Horror Vacui
Horror Vacui

    kein //
Horror Vacui

    kein //

  / <prior> /
Horror Vacui

     kein //

   / <prior> /

/ '' / aka / <?> /
Teilfunde

 $1
Teilfunde

 $1 => $0
Teilfunde

      $1 => $0

$0 => $*EXECUTABLE_NAME
Teilfunde

 $1 => $0

kein 1 .. 9
Teilfunde

       $1 => $0

         kein:

L...E, U...E, Q...E
Perl 6 Regex

  $1 => $0



  { lc …}, ...
Teilfunde

 $1 => $0

      $0 ..
Teilfunde

 $1 => $0

      $0 ..
Teilfunde

 $1 => $0

      $0 .. $15
Teilfunde

 $1 => $0

@() == $0 ..
Teilfunde

 $1 => $0

@() == $0 ..

 @()[1][2]
Teilfunde

 $1 => $0

 ( () (…) )

 @()[0][1]
Regex Variablen

   $0 …, @()

    $/,
Regex Variablen

   $0 …, @()

    $/, $/<..>
Regex Variablen

   $0 …, @()

    $/, $/<..>

      $<..>
Regex Variablen

   $0 …, @()

    $/, $/<..>

  $<key> = (...)
Operatoren
Operatoren

        rx//
Operatoren

             rx//


Warum nicht qr // ?
Operatoren

              rx//


Subsprache, ! Quoting
Operatoren

            rx//


$~MAIN $~Q $~Regex
Operatoren

~~      rx//
Operatoren

   ~~            rx//

m// ms// s/// ss/// tr///
Operatoren

   ~~            rx//

m// ms// s/// ss/// tr///

match comb subst trans
Operatoren



ms//   ss///
Operatoren



  ms//    ss///

m :s //   s :ss ///
Operatoren



:sigspace :samespace

  m :s //   s :ss ///
Operatoren

Leerzeichen trennen Wörter

:sigspace :samespace

  m :s //     s :ss ///
Modifikatoren

:g
Modifikatoren

:g   :i   :a   :m
Modifikatoren

:g   :i    :a   :m

     :ii   :aa :mm
Modifikatoren

   :g   :i      :a   :m

:x(n) :nth(n)
Modifikatoren

   :g    :i   :a   :m

:x(n) :nth(n) :c(n) :p(n)
Modifikatoren

   :g    :i   :a   :m

:x(n) :nth(n) :c(n) :p(n)

    :r :ov :ex :rw
grammar Methoden

     regex {..}

     token {..}

      rule {..}
grammar Methoden

          regex {..}

   token {..} regex :ratchet {}

rule {..} regex :ratchet :sigspace {}
grammar Methoden
grammar webpage {
  rule TOP {<head> <body>}
  rule head {<meta>|<title>}
 …

 token title {
   <?after <title> .*
   <?before </title>
 }
grammar Methoden
grammar webpage {
  rule TOP {<head> <body>}
  rule head {<meta>|<title>}
 …

 token title {
   <?after <title> .*
   <?before </title>
 }   $/<head><title>
grammar sind Klassen


 $~MAIN $~Q $~Regex
What I Do

perlfoundation.org/
 perl6/index.cgi?
  perl_6_tablets
Thank You

Perl 6 Regex und Grammars