1

So the official documentation says absolutely nothing about the tilde sign (~) used in regexp patterns, for example as in the seeCurrentUrlMatches() function. Yet, it is used extensively in the documentation.

In the exmample, the regexp looks like this:

    $I->seeCurrentUrlMatches('~$/users/(\d+)~');
  • Without the tilde sign, it gives an error. eg. grabFromCurrentUrl('(\d+)') returns:

    " (\d+)" Fail Nothing to grab. A regex parameter required.

  • The end-of-string regexp operator's ($) position makes no sense (I presume the dollar sign has a completely different meaning in this context /my guess would be shorthand for the home path/.)
  • In standard regexp, the ~ captures the character itself

My conclusion is the regexp pattern that Codeception expects from you is clearly non-standard. So what does the ~ and $ do? Where can I find a throughout documentation or article about this?

Philipp Maurer
  • 2,480
  • 6
  • 18
  • 25
Gergely Lukacsy
  • 2,881
  • 2
  • 23
  • 28
  • 1
    My guess is, that just like `preg_match()`, the pattern needs to be encapuslated by a special sign, which can be chosen the user and was chosen as a tilde by the author of the documentation. – Philipp Maurer Aug 08 '18 at 09:07

1 Answers1

3

Codeception doesn't use any special regex functions.

seeCurrentUrlMatches method calls PhpUnit's assertRegexp method which uses preg_match under the hood.

preg_match uses pattern delimiters. Delimiter can be any non-alphanumeric character. / is the most common delimiter, but it is inconvenient for matching URL, because you would have to escape a lot of slashes in URL, so using ~ as a delimiter avoids need to escape.

$ at the beginning of pattern is probably a simple mistake in example.

Naktibalda
  • 13,705
  • 5
  • 35
  • 51