2010-07-23 4 views
3

CodeIgniter 응용 프로그램의 일부 경로에서 작업 중이므로 하나의 정규식을 제외하고 'catch-all'을 선언해야합니다. 으로 시작하는 경로가 'ajax /'로 시작하는 경로는 'main'- 라우터로 리디렉션되어야합니다. 이렇게 :CodeIgniter에서 regex를 사용하여 "ajax /"로 시작하지 않는 문자열을 어떻게 catch합니까?

$route['regexmagichere'] = "main"; 

이렇게 내 정규식 기술을 넘어서는 확실한 방법이며 도움이 필요합니다.

$string_one = "ajax/someotherstuffhere"; 
$string_two = " ajax/test"; 
$string_three = "somestuffhere"; 

여기에 $ string_two를가 false를 반환하는 유일한 하나가 될 것입니다 : 정규식은과 같이, '아약스 /'로 시작하지 않는 모든 문자열에 true를 반환한다. 시간 내 줘서 고마워!

+0

경로를 실행하는 순서가있는 경우 끝에 특정 경로를 추가하고 * catchall * 경로를 추가 할 수 있습니다. – miku

답변

6

당신은 내가 ^(?<!ajax)\/이 트릭을 할 것입니다 생각

^((?!ajax).*) 
+1

설명서에서 : 분명히 비슷한 패턴 (?! foo) 표시 줄은 "foo"이외의 다른 문자로 시작되는 "bar"표시를 찾지 않습니다. 다음 3 개의 문자가 "bar"일 때 어설 션 (?! foo)은 항상 TRUE이기 때문에 "bar"의 모든 어커런스를 찾습니다. 이 효과를 얻으려면 표정 어설 션이 필요합니다. –

+0

@Question Mark -이 경우에는'^'문자열의 시작 부분에 앵커가 붙지 않는다면'(?! ajax)'는 첫 번째 문자가'''ajax "'가 아닌지 확인하여 전체 문자열을 캡처합니다. – gnarf

+1

'(?! foo) bar'와'(?! foo). *'사이에는 차이가 있습니다.이 해결책은 캡쳐 그룹이 아마도 필요하지는 않지만 잘 작동 할 것입니다 -^(?! 아약스). *'괜찮습니다. –

-1

시도 할 수 있습니다.

"생각해"라고 강조합니다.

+1

문자열의 시작 부분에 룩백을 사용하는 것은 어리석은 듯하다. 이것은'/'로 시작하는 임의의 문자열과 일치 할 것이다 – gnarf

+0

뒤에서 보이는 것은 /에 있고, 일치하는/someotherstuffhere는 질문의 기준을 만족시키지 않는다? –

+0

CodeIgniter에서이 표현식을 특별히 테스트 해 봤습니까? 모든 경로의 시작 부분에 슬래시가 포함되어 있습니까? 슬래시가 필요합니까? –

3

귀하의 요청에 따라 처리하십시오. ajax/로 시작하지 않는 모든 문자열에 대한 사실 반환하는 정규 표현식 :

^(?!ajax/).* 

당신은 /\/으로 탈출해야 할 수도 있습니다. (?!)on this question으로 설명되는 음수 선행 표현입니다.

+0

그냥 부울 일치하는 경우 궁금,'*'필요한가? –

+0

아마도 ...'.'은 아마도 필요하지 않지만, 테스트하지 않았고, 경로 일치에서 전체 문자열을 소비하지 않는다면 codeigntor가 펑키 한 일을하는지 알지 못했습니다 ... – gnarf

관련 문제