2012-03-16 5 views
1

안녕하세요 stackoverflow 커뮤니티!
에 기초한 PHP에서 간단한 정규 표현식을 사용하려고합니다. 긍정적 인 lookbehind. 내 목표는 도메인 이름과 특정 문자 집합 (? 또는 & 또는 /) 사이의 URL에있는 모든 것을 추출하는 것입니다.PHP 정규식 : 긍정적 인 lookbehind와 여러 정지 문자

  • foo.com/bar?
  • foo.com/bar&
  • foo.com/bar/

나는 함께 the plateform test 아니라에서 잘 작동

(?<=foo\.com\/)[^/?&]+ 

을 시도 : 나는 그 예에 "바"를 추출 할 PHP 5.3x preg_match : 오류 발생 그 중 하나는 여러 정지 문자를 사용할 수 없다는 것입니다.

나는 또한 긍정적 인 lookbehind/lookahead의 조합을 시도했지만 문제는 동일하게 유지됩니다. 내가 뭘 잘못 했니?

+0

당신이 묶나요 다른 구분 기호를 사용 구분 기호 안에 정규식? 코드를 보여 주시겠습니까? – Toto

+0

@ M42 확실! 'preg_match ("/ (? <= foo \ .com \ /) [^ /? &] + /", "http://www.foo.com/bar?", $ result);' –

+0

문자 클래스에있는 것을 포함하여'/ (? <= foo \ .com \ /) [^ \ /? &] + /'모든 슬래시를 이스케이프 처리해야합니다. – Toto

답변

1

PHP에서 PHP와 달리 (말) JavaScript는 문자 클래스 내에서도 을 벗어나지 않고도 정규식 구분 기호를 사용할 수 없습니다. 그래서, 당신은이 설정을 변경해야합니다

"/(?<=foo\.com\/)[^/?&]+/" 

이에 :

"/(?<=foo\.com\/)[^\/?&]+/" 
1
는 슬래시 탈출

:

preg_match("/(?<=foo\.com\/)[^\/?&]+/", "http://www.foo.com/bar?", $result); 
         here ___^ 

또는

preg_match("#(?<=foo\.com/)[^/?&]+#", "http://www.foo.com/bar?", $result); 
관련 문제