2013-06-16 2 views
1

HTML 파일을보고 정규 표현식과 일치하는 경우 요소를 찾습니다. 요소가 일치하는지 결정하는 한 가지 주요 사항 이드가 무엇인지. ID는 내가 사용하기로 결정한 특수 문자 여야합니다. 문제는 일부 사용자가 HTML에 ID를 쓸 때 이중 또는 작은 따옴표를 사용한다는 것입니다. 두 경우 모두 잡을 수 있기를 바랍니다. 그래서 내 정규 표현식은 이것이다 :PHP preg_match - 큰 따옴표 나 작은 따옴표를 사용하는 속성 캡처

내가 id이 위치를 볼 수 있습니다 중간에
preg_match('@(<)([^\s]*).*(id)\s*=\s*["|\']{{ALViewElement_'.$viewElement.'}}["|\'][^/]*?(>)@i', $viewFile, $elementMatches, PREG_OFFSET_CAPTURE) 

닫습니다. 등호 뒤에는 ["|\']이 있고 마지막에는 닫는 따옴표에 대해 동일한 것을 사용합니다. 내가 대신 작은 따옴표를 사용하는 경우, 일치하지 않는, 그러나

<section id="{{ALViewElement_resume}}" data-test="testing" > 
      <!--{{RESUME_ADD_CHANGE_PIECE}}--> 
      <!--{{RESUME}}--> 
     </section> 

:

<section id='{{ALViewElement_resume}}' data-test="testing" > 
      <!--{{RESUME_ADD_CHANGE_PIECE}}--> 
      <!--{{RESUME}}--> 
     </section> 

나는 수가 없어 내 HTML이 보이는 경우

, 나는 일치를 얻을 수 정규 표현식에 무엇이 잘못되어 있는지를 파악하기 위해 작은 따옴표를 사용하지 않습니다. 어떤 아이디어?

+1

HTML/XML 문서를 구문 분석하기 위해 RegEx를 사용하지 마십시오. DOM 또는 XPath를 사용하십시오. –

+0

내가하고있는 일은 DOM이나 XPath보다 RegEx를 사용하는 것이 훨씬 쉽다는 것을 입증했다. 나는 두 가지 옵션을 모두 탐구했다. – user1513171

+0

더 쉽게 여기 물어 보지 않으시겠습니까? –

답변

2

나는 일반적인 대답을 제시하고,이를 당신의 경우에 적용 할 수 있습니다. 단일 또는 이중 따옴표를 일치 시키려면, 트릭은 다음과 같습니다

1) \1 캡처 그룹 1)을 참조 역 참조를 (사용

게으른 한정 기호와 함께 간단한 방법 :

(["']).*?\1

최적화 된 안전한 방법 (탈출 따옴표 거래) :

(["'])(?>[^"']|["'](?<!\1)|(?<=\\)\1)*+\1

캡처 그룹과

(?>"....."|'.....')

흥미로운 변형 :

2)는 교대를 사용

(?|"...(###)..."|'...(###)...')

두 캡처 그룹이 동일한 수 있습니다.

주의 사항 : 귀하의 패턴에 문제가 있지 않습니다.

+0

글쎄, 여기서 한 일은 첫 번째 따옴표가 두 번째 따옴표와 일치한다는 것을 확인하는 것입니다. 그게 좋은 일이지만 그건 내 문제가 아니야. 나는 확실하지 않지만, 내 문제는 내 작은 따옴표 앞에서 사용하는 것과 관련이 있다고 생각합니다. 내 preg_match 작은 따옴표를 사용하기 때문에 그것을 가지고있다. 지금 사용 된 첫 번째 인용문이 사용 된 두 번째 인용문과 일치하는지는 지금 염려하지 않습니다. – user1513171

+0

문제의 의미가 내 패턴에서 오지 않았는지 확실하지 않습니다. 설명해 주시겠습니까? – user1513171

+0

@ user1513171 : 두 경우 모두 패턴을 테스트했는데 성공했습니다 –

관련 문제