0

古いサイトを CodeIgniter に変換しようとしていますが、これには古い URL の保存が含まれます。#、AZ、az のいずれかの 1 文字を渡すことができる必要があります。これが私のパターンです:

/^[a-zA-Z#]$/

preg_match() に渡すことで、すべてのテストで問題なく動作するようです。次のように CI ルートに追加するだけです。

$route['(:any)/(/^[a-zA-Z#]$/)'] = "collection/view/$1/alpha/$2";

そして、それは私にこのエラーを与えています:

Message: preg_match(): Unknown modifier '/'

私は一生、このパターンをマッサージして CI が受け入れられるようにすることはできません。案外逃げられていると思います。どんな助けでも大歓迎です。

アップデート:

/core/Router.php に飛び込んで、CI がパターンで何を行っているかを確認しました。CIが使用しているものは次のとおりです。

#^(.+)/(/^[a-zA-Z\#]$/)$#

渡された文字列全体を 1 つの大きなパターンに変換しています。

解決済み:

CI が 1 つの大きなパターンを作成しようとしていることを理解した後、パターンを最初から書き直し、(:any) を削除しました。また、# を + に置き換えました。これが私の最終的な解決策です:

 $route['(^(.+)/([a-zA-Z\+]$))'] = "collection/view/$2/alpha/$3";

よりエレガントなパターンをお持ちの方は、お気軽に投稿してください。ありがとう!

4

2 に答える 2

2
$route['(:any)/(^([a-zA-Z]|\#))'] = "collection/view/$1/alpha/$2";
于 2013-02-28T05:11:04.307 に答える
0

正規表現で # をエスケープする必要はないと思います。使ってみて

/^([a-zA-Z#])$/

それ以外の

(/^([a-zA-Z]|#)$/)

于 2013-02-28T05:34:03.027 に答える