2012-12-14 2 views
1

나는 /php/anything 일치하는 정규 표현식는 preg_match 파이프 기호

|^(/[a-z]{2})?/?(php)/([-a-z0-9]+)/?/?$| 

있습니다.

은 지금은 모두

/php/anything 
/java/anything 

나는 피곤 |^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$| 있지만 작동하지 않는 일치하는 정규 표현식을합니다.

누군가 해결책을 도울 수 있습니까? 다른 부분은 그대로두고 싶지만, 단지 (php) 부분 만 변경하고 싶습니다. 여기

코드

preg_match("|^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$|", 'php/anything') 

이다 그러나 나는이 경고를 얻을 일치 문제는 당신이 같은 파이프 기호를 사용하고 단순히

Warning: preg_match(): Unknown modifier 'j' 

감사

+0

귀하의 정규 표현식은 매우 우아하지를하지만 작동하는 것 같다 : HTTP ://rubular.com/r/J2mE8vdhjb 구체적으로 무엇이 문제입니까? 코드를 게시 할 수 있습니까? –

+0

정확히 일치시키려는 대상 .. 우리는 정규 표현식을 정리하는 데 도움이 될 수 있습니다. – Anirudha

+0

아니면 (php | java)/([- a-z0-9] +) /? 부품 – user1105950

답변

1

당신은으로 |을 사용하고 있습니다 : 따라서 당신은 패턴 자체 내에서 파이프 기호를 탈출, 또는 당신이 당신의 패턴으로 사용하지 않을 것을 뭔가 다른 구분 기호를 변경해야 regex delimiter하지만 정규식 안에는 |이 있으므로 변경해야합니다.이 문자는 탈출해야합니다. 당신이하지 않으면 두 번째 |은 정규식의 끝으로 취급되고 그 뒤에 오는 문자 j은 정규식 수정 자로 취급됩니다. j은 유효한 수정자가 아니기 때문에 오류가 발생합니다.

당신은 탈출 |로 :

preg_match("|^(/[a-z]{2})?/?(php\|java)/([-a-z0-9]+)/?/?$|", 'php/anything') 
           ^

아니면 구분의 다른 쌍을 사용할 수 있습니다

preg_match("~^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$~", 'php/anything') 
      ^          ^
+0

URL에는 PHP 또는 Java 만있을 수 있습니다. – user1105950

+0

나는 이미 도망 간다. – user1105950

+0

아, 이제 알았다. 도와 주셔서 감사합니다 – user1105950

1

작동하지 않습니다 패턴을 한정하는 문자.

#^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$# 
{^(/[a-z]{2})?/?(php|java)/([-a-z0-9]+)/?/?$} 

+0

도움을 주셔서 감사합니다 – user1105950