public function compile() {
		foreach ($this->_params as $key => $value) {
			if (!strpos($key, ':')) {
				continue;
			}
			unset($this->_params[$key]);
			$this->_meta[$key] = $value;
		}

		$this->_match = $this->_params;

		if ($this->_template === '/' || $this->_template === '') {
			$this->_pattern = '@^/*$@';
			return;
		}
		$this->_pattern = "@^{$this->_template}\$@";
		$match = '@([/.])?\{:([^:}]+):?((?:[^{]+?(?:\{[0-9,]+\})?)*?)\}@S';

		if ($this->_config['unicode']) {
			$this->_pattern .= 'u';
		}
		preg_match_all($match, $this->_pattern, $m);

		if (!$tokens = $m[0]) {
			return;
		}
		$slashes = $m[1];
		$params = $m[2];
		$regexs = $m[3];
		unset($m);
		$this->_keys = [];

		foreach ($params as $i => $param) {
			$this->_keys[$param] = $param;
			$this->_pattern = $this->_regex($regexs[$i], $param, $tokens[$i], $slashes[$i]);
		}
		$this->_defaults += array_intersect_key($this->_params, $this->_keys);
		$this->_match = array_diff_key($this->_params, $this->_defaults);
	}
public function compile() {
		foreach ($this->_params as $key => $value) {
			if (!strpos($key, ':')) {
				continue;
			}
			unset($this->_params[$key]);
			$this->_meta[$key] = $value;
		}

		$this->_match = $this->_params;

		if ($this->_template === '/' || $this->_template === '') {
			$this->_pattern = '@^/*$@';
			return;
		}
		$this->_pattern = "@^{$this->_template}\$@";
		$match = '@([/.])?\{:([^:}]+):?((?:[^{]+?(?:\{[0-9,]+\})?)*?)\}@S';

		if ($this->_config['unicode']) {
			$this->_pattern .= 'u';
		}
		preg_match_all($match, $this->_pattern, $m);

		if (!$tokens = $m[0]) {
			return;
		}
		$slashes = $m[1];
		$params = $m[2];
		$regexs = $m[3];
		unset($m);
		$this->_keys = [];

		foreach ($params as $i => $param) {
			$this->_keys[$param] = $param;
			$this->_pattern = $this->_regex($regexs[$i], $param, $tokens[$i], $slashes[$i]);
		}
		$this->_defaults += array_intersect_key($this->_params, $this->_keys);
		$this->_match = array_diff_key($this->_params, $this->_defaults);
	}
public function compile ( ) { foreach ( $ this -> _params as $ key => $ value ) { if ( ! strpos ( $ key , ':' ) ) { continue ; } unset ( $ this -> _params [ $ key ] ) ; $ this -> _meta [ $ key ] = $ value ; } $ this -> _match = $ this -> _params ; if ( $ this -> _template === '/' || $ this -> _template === '' ) { $ this -> _pattern = '@^/*$@' ; return ; } $ this -> _pattern = "@^{$this->_template}\$@" ; $ match = '@([/.])?\{:([^:}]+):?((?:[^{]+?(?:\{[0-9,]+\})?)*?)\}@S' ; if ( $ this -> _config [ 'unicode' ] ) { $ this -> _pattern .= 'u' ; } preg_match_all ( $ match , $ this -> _pattern , $ m ) ; if ( ! $ tokens = $ m [ 0 ] ) { return ; } $ slashes = $ m [ 1 ] ; $ params = $ m [ 2 ] ; $ regexs = $ m [ 3 ] ; unset ( $ m ) ; $ this -> _keys = [ ] ; foreach ( $ params as $ i => $ param ) { $ this -> _keys [ $ param ] = $ param ; $ this -> _pattern = $ this -> _regex ( $ regexs [ $ i ] , $ param , $ tokens [ $ i ] , $ slashes [ $ i ] ) ; } $ this -> _defaults += array_intersect_key ( $ this -> _params , $ this -> _keys ) ; $ this -> _match = array_diff_key ( $ this -> _params , $ this -> _defaults ) ; }
Compiles URL templates into regular expression patterns for matching against request URLs,
and extracts template parameters into match-parameter arrays.

@return void
Compiles URL templates into regular expression patterns for matching against request URLs and extracts template parameters into match - parameter arrays .