2013-02-28 5 views
1

이전 사이트를 CodeIgniter로 변환하는 과정에서 이전 URL을 보존해야합니다. #, A-Z 또는 a-z 중 하나의 문자를 전달할 수 있어야합니다. 여기 내 패턴은 다음과 같습니다.CodeIgniter 경로에서 RegEx 사용

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

내 모든 테스트에서 preg_match()에 전달하면 문제가없는 것 같습니다.

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

그것은 나에게이 오류주고있다 : 나는 단순히이 같은 CI 경로에 추가 내가 내 인생을 허용하는이 패턴을 마사지 할 수

Message: preg_match(): Unknown modifier '/' 

를 CI에 동의합니다 그것. 나는 그것이 이상하게 도망 가고 있다고 생각한다. 어떤 도움을 주시면 감사하겠습니다.

UPDATE :

난 그냥 CI 패턴으로 무엇을하고 있었는지 볼 /core/Router.php에 뛰어 들었다

. CI가 사용하는 것은 다음과 같습니다.

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

전달 된 문자열 전체를 하나의 큰 패턴으로 변환합니다.

해결 :

CI가 하나 개의 큰 패턴을 만들려고 시도 것으로 파악 후 내가 처음부터 패턴을 재 작성 및 제거 (: 어떤). 나는 또한 #을 +로 대체했다. 여기에 내 마지막 해결책이 있습니다.

더 세련된 패턴을 가진 사람은 누구나 자유롭게 게시 할 수 있습니다. 감사!

+0

는'#이'의 URL에서 특수 문자가, 내가 서버를 읽을 수 없기 때문에 당신이 경로에서 사용할 수 있다고 생각하지 않습니다 , 또는 그 이후에 오는 모든 것. –

+0

제가 생각하기에 나는 #을 제거하고 a-zA-Z로 테스트를 시도했지만 여전히 일치를 얻지 못했습니다. – madzilla

답변

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

오류가 발생했으나 다음과 일치하지 않습니다. http://example.com/test/a – madzilla

+0

아직 일치하지 않습니다. 하나의 char 만 넘겨 지길 원할 때마다 관계없이 ^가 필요합니다. 나는 다른 모든 경로도 제거하여 갈등이 있는지 없는지 확인했습니다. 이 시점에서 꽤 길을 잃었다. – madzilla

+0

@ madzilla, 나는'/'을 열고'/'를 닫으면 CI에 의해 자동으로 추가된다고 생각합니다. 한 번 해봐. –

0

저는 정규 표현식에서 #을 벗어날 필요가 없다고 생각합니다.

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

대신 사용해보십시오

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

+0

내가 도망 가지 않으면 위의 오류가 나타납니다. 그러나 당신이 제안한 패턴으로 패턴을 단축 할 수 있습니다. 나는 심지어 그()를 제거 할 수 있었다. – madzilla

+0

아마도 $ 2를 슬래시 안에 넣으려고 할 수 있습니까? 이것을 반영하기 위해 수정 된 답변. – irregularexpressions