private static function RouteCompiler::computeRegexp in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/symfony/routing/RouteCompiler.php \Symfony\Component\Routing\RouteCompiler::computeRegexp()
Computes the regexp used to match a specific token. It can be static text or a subpattern.
Parameters
array $tokens The route tokens:
int $index The index of the current token:
int $firstOptional The index of the first optional token:
Return value
string The regexp pattern for a single token
1 call to RouteCompiler::computeRegexp()
- RouteCompiler::compilePattern in vendor/
symfony/ routing/ RouteCompiler.php
File
- vendor/
symfony/ routing/ RouteCompiler.php, line 200
Class
- RouteCompiler
- RouteCompiler compiles Route instances to CompiledRoute instances.
Namespace
Symfony\Component\RoutingCode
private static function computeRegexp(array $tokens, $index, $firstOptional) {
$token = $tokens[$index];
if ('text' === $token[0]) {
// Text tokens
return preg_quote($token[1], self::REGEX_DELIMITER);
}
else {
// Variable tokens
if (0 === $index && 0 === $firstOptional) {
// When the only token is an optional variable token, the separator is required
return sprintf('%s(?P<%s>%s)?', preg_quote($token[1], self::REGEX_DELIMITER), $token[3], $token[2]);
}
else {
$regexp = sprintf('%s(?P<%s>%s)', preg_quote($token[1], self::REGEX_DELIMITER), $token[3], $token[2]);
if ($index >= $firstOptional) {
// Enclose each optional token in a subpattern to make it optional.
// "?:" means it is non-capturing, i.e. the portion of the subject string that
// matched the optional subpattern is not passed back.
$regexp = "(?:{$regexp}";
$nbTokens = count($tokens);
if ($nbTokens - 1 == $index) {
// Close the optional subpatterns
$regexp .= str_repeat(')?', $nbTokens - $firstOptional - (0 === $firstOptional ? 1 : 0));
}
}
return $regexp;
}
}
}