2014-11-20 2 views
0

생각은 일치 실제로이 숭고한 텍스트 3 (찾을 수 모두에서 실제로 <p>...</p> 요소잘못된 Lookbehind와 HTML 태그

의 숫자 곳 h3></section 앞에 오는 모든 코드 블록과 일치하는 것입니다 (덕분에, ctrl+shift+g을 플러그인 개미하는) <div><\div> 태그에 모든 블록 포장의 의도와 파일), ...

... 당신이 알고있는 경우에 작동한다, 그래서 말해 내가 그것에 대해 걱정 중단됩니다 . 또는 같은 목표를 달성 할 수있는 대안적인 방법을 제시 할 수 있다면 그것은 또한 최고 일 것입니다.

내 생각은 다음과 같습니다

(?<=<\/h3\s*)<p(?:\n|.)*(?!\s*<\/section) 

는이 같은 것으로 올 것 세분화 ...

(?<=<\/h3\s*)  # lookbehind for </h3 and any space including newline 
<p(?:\n|.)*   # match, if it follows, <p and anything... 
(?!\s*<\/section) # if not followed by spaces and <\section 

나는 Invalid lookbehind asserion... 받고 있어요 그리고 첫 번째 별표 것으로 보인다.

이것은 python 3에서 올바 릅니까?

EDITED : \ s에 \ n이 포함되어 있습니다. 또한,

+2

숭고한 텍스트가 실제로하지 파이썬의 – MattDMo

+2

펄에서, 당신은 일반적으로 가변 길이 lookbehinds의 부족을 해결하기 위해'\ K'를 사용할 수있는 PCRE 정규식 엔진을 사용합니다. '\ {\ s'는 Perl에서'\ n'을 포함하고, 아마도 다른 모든 곳에서도 가능할 것입니다.)'m { ikegami

+1

아! 감사. 나는 PCRE – ferhtgoldaraz

답변

0

문제점이 있었다 유사한 문제를 가진 경우 PCRE에 대해 의견을 참조하십시오 MattDMo은 주석으로,

먼저, 숭고한는 PCRE의 정규식 엔진을 사용합니다.

둘째, 정규 표현식의 세 번째 부분 인 부르 키운 부분은 음수가 아니며 긍정적이어야합니다 (뒤따라 오는 경우 NOT, 뒤따라 오지 않을 경우). 그것은 (?=\s*</section)이 될 것입니다.

셋째, PCRE lookbehinds는 고정 길이 여야하므로 *을 포함 할 수 없습니다. 이것은 \K 이스케이프 (escape)로 해결할 수 있습니다. 즉, 현재 전체 일치의 시작을 다시 설정합니다 (예 : \ K가 일치하지 않는 경우).

그리고 마지막으로 정규 표현식의 두 번째 세분화 된 부분에서 <p(?:\n|.)*<p(?:\n|.)*?이되고 은 끝에 ?을 포함해야합니다. 그렇게하면 성냥이 게으르다. woked 무엇

했다 :

h3>\s*\K<p(?:\n|.)*?(?=\s*</section)