2012-03-27 2 views
0

일부 html 코드와 일치하는 정규 표현식을 작성했지만 제대로 작동하지는 않습니다. "wp-caption"이후에 문제가 있습니다.왜 내 정규 참조 표현이 작동하지 않습니까?

class=(["\'])(?:[\w\s])*?wp-caption[\s\1] 

내가 일치시킬 코드 :

class="wp-caption" 
class='wp-caption' 
class="wp-caption foo" 
class="foo wp-caption" 

내가 처음 세 결과와 일치하지만 네 번째 없다. 나는 \ 1이 일하고 있다고 생각하지 않는다. 이견있는 사람?

BTdubs 나는 시험 목적으로 http://regexpal.com/을 사용 해왔다.

+1

전에 "BTdubs"를 본 적이 없습니다. 즐겁습니다. – octern

+0

맞습니다. 역 참조가 대괄호 안에 작동하지 않습니다. – aMarCruz

답변

0
class=(["\'])(?:[\w\s])*wp-caption[\w\s]*\1 
1

이 역 참조는 문자 클래스 (대괄호 [] 내부의 물건) 내에서 참조 할 수 없기 때문에 그것은 작동하지 않습니다 너무

class\s*=\s*(['"])(?:(?!\1).)*wp-caption(?:(?!\1).)*\1 
0

작동 할 수 있습니다. 다른 답변에서 언급했듯이 lookaround를 지원하지 않는 언어를 사용하지 않는 한 lookahead에서 역행을 사용할 수 있습니다 ...

요컨대, 수행 할 작업은 사용하는 언어에 따라 다릅니다 (정규 표현식 구현은 언어를 구현하는 언어에 크게 의존합니다.)

+0

나는 앞머리에 대해서도 듣지 못했다. 그렇다면 처음 3 가지 예제에 대한 역 참조는 왜 작동합니까? – BFTrick

+0

@BFTrick 솔직히 말해서 처음 두 개가 왜 작동할지는 모르겠다 - 나는 정규식 (JavaScript를 포함하여, 내가 사용하고 있다고 가정 함)의 여러 가지 풍미에 상당히 능숙하며, 처음 두 줄을 일치시킬 수 있지만, 예를 들어 표현식과 코드를 regexpal.com에 잘라 붙여 넣은 것만으로도 그 예에서 세 번째 줄과 일치합니다 ... –

+0

@BFTrick'[\ s \ 1]' 본질적으로 "공백 문자 (공백, 탭, CrLf 및 기타), 백 슬래시, 또는 문자 숫자"1 "과 일치 함을 의미합니다. - wp-caption이 포함 된 클래스 속성을 식별하려는 경우, _wlow-_'wp-caption' 인 다른 클래스를 제거했다고 가정하고, 클래스 사이의 공백 문자 때문에 충돌이 성공했을뿐입니다. 식을 사용하여 예제 코드의 처음 두 줄과 일치 할 수 없습니다. [-> '둘러보기'에 대한 추가 정보] (http://www.regular-expressions.info/lookaround.html) –

관련 문제