環境
MacOS Mojave 10.14.5
VirtualBox 6.0.0
Vagrant 2.2.3
CentOS Linux release 7.6.1810
Apache/2.4.6
PHP 5.4.16
mysql5.7.26
パーフェクトPHPというPHPの参考書を見ながらブログシステムの構築を行っているのですが、以下のエラーの原因が突き止められません。
Warning: preg_match(): Compilation failed: unrecognized character after (? or (?- at offset 12 in /var/www/mini-blog.com/application/core/Router.php on line 38
エラー該当のファイルは以下です。
core/Router.php
<?php class Router { protected $routes; public function __construct($difinitions) { $this->routes = $this->compileRoutes($difinitions); } public function compileRoutes($difinitions) { $routes = array(); foreach($difinitions as $url => $params){ $tokens = explode('/',ltrim($url,'/')); foreach($tokens as $i => $token){ if(0 === strpos($token,':')){ $name = substr($token,1); $token = '(?p<' . $name . '>[^/]+)'; } $tokens[$i] = $token; } $pattern = '/' . implode('/', $tokens); $routes[$pattern] = $params; } return $routes; } public function resolve($path_info) { if ('/' !== substr($path_info, 0, 1)) { $path_info = '/' . $path_info; } foreach ($this->routes as $pattern => $params) { if (preg_match('#^' . $pattern . '$#', $path_info, $matches)) { $params = array_merge($params, $matches); return $params; } } return false; } }
コンパイル失敗
38行目の/var/www/mini-blog.com/application/core/Router.phpのオフセット12の位置にある文字列の後に認識できない文字があります
というエラーメッセージなので正規表現にミスがあるのかと思われますが原因を突き止められないため質問させていただきます。
回答1件
あなたの回答
tips
プレビュー