Previous

Next


15. Fanta Revisited (continued)

  • Here is how the NFA engine would work:
      Position in the regex | Position in the string
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^                    |^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^                    | ^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^                    |  ^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^                    |   ^
      ----------------------------------------------------------------
    
      etc.
    
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^                    |            ^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^                   |            ^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^                  |            ^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^                 |            ^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^                |            ^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^             |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^ ^           |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
    
  • Oops! That's no good. But no worries - the NFA engine will now happily backtrack, and force the ".*" to give up characters:
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^             |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^ ^           |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^             |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^ ^           |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^             |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
       fanta(.*)n           | This isn't fantastic, let's drink fanta!
       ^^^^^ ^^ ^           |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
      ----------------------------------------------------------------
    
  • So, what's the big deal? Why does it matter how the regex engine works? They seem to do the same thing, just in different ways. Right?

Previous

Next

Andrew Hill

For LinuxSA Meeting, 17 April 2001