2012-07-26 2 views
3

"이름"은 "목록"이후에만 일치해야하지만 물론 그 단어는 URL 디렉토리 또는 페이지가 될 수 있습니다.정규 표현식 내부에 문자 집합이있는 정규 표현식이 가능합니까?

mydomain.com/listing/name

그래서 내가 할 수있는 "REGuest"(요청) 유일한 것은이 일부 상위 디렉토리가 될 수 있습니다. 즉, 도메인 뒤에 두 번째로 오는 "위치", 즉 일치하는 것을 원합니다.

나는

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

같은 것을 시도하고있다 그러나 문자 집합은 적어도 그것은 단지 하나의 문자와 일치하는 설정이다, 긍정적 인 lookbehind 내에서 작동하지 않습니다. 하나 이상 일치 시키려고하면 (예 : +,? 또는 *로 수정) 작동을 멈 춥니 다.

분명히 긍정적 인 lookbehind 구문이 누락되었습니다.

두 번째 수준의 파일 이름은 어떻게 찾을 수 있습니까?

감사합니다.

답변

2

Regular-expressions.info는 나쁜 소식은 대부분의 정규식 맛들이 거꾸로 정규 식을 적용 할 수 없기 때문에 당신이하는 lookbehind 내부 다만 어떤 정규식을 사용할 수 없다는 것입니다

상태. 따라서, 정규 표현식 엔진합니다 ... lookbehind을 확인하기 전에 다시 단계 얼마나 많은 단계를 알아낼 수있을 을 필요로

(그들은 심지어 펄, 파이썬과 자바를 언급, 더 읽어보십시오.)

한정 기호가 문제 일 수 있다고 생각합니다. stackoverflow에 this이 발견되었고 잠깐 넘어갔습니다.

mydomain\.com\/[^\/\?&]+\/([^\/\?&]+)(?:\/)? 

:

는 단지 전체 경로와 일치, 두 번째 수준의 파일 이름 그룹을 사용하는 것이 가능하지 않을까요 (참고 : 내 테스트를 위해/탈출했다 ...)

이의 결과는 같은 것이다 : 나는 문제의 상황을 모르기 때문에 지금

Array 
(
    [0] => mydomain.com/listing/name 
    [1] => name 
) 

을, 나는 당신이 결과를 사후 처리 할 수 ​​있어야하고, 그룹을 얻을 것입니다 가정 (1) (나는 ndex 1)을 결과에서 제외합니다. 그렇지 않다면, 불행히도 ...