2013-06-24 1 views
0

문제

PHP는 preg_replace이다 아래 내 정규식 작동 큰Regex Mystery -이 옵션들을 추가 할 수 있습니까?

'|(?<!</h2>)\s*\n(?!<h2>)|' 

내가 차라리 'H2'부분은 H2 '의 검색 섹션을 것이다 그러나 | P | 리 | DIV '등, 내가 선택한 것을 찾을 수있는 것은 무엇이든간에.

나는

'|(?<!</(?:h2|p|li|div)>)\s*\n(?!<(?:h2|p|li|div)>)|' 

같은 모든 종류의 시도하지만 그냥 작동하지 않습니다.

내가 어제 게시 한 문제의 대안으로이 문제를 해결할 때 올바른 방향으로 나를 지적 할 수 있다면 큰 도움이 될 것입니다.

추가 노트

코드에 대한 나의 목표는 BTW 줄 바꿈하기 전에/H2 또는/P 등을하지 마십시오과 H2 또는 P 등이없는 모든 줄 바꿈 (\ n을)를 찾을 수 있습니다

개행 후. 그래서 ....

example\n      <- find this 
example\n      <- find this 
example\n      <- not this (as <h2> next starts line) 
<h2>example\n     <- find this 
example</h2>\n     <- not this (as </h2> ends this line) 
example\n      <- find this 

많은 많은 감사,

+0

.txt 파일 또는 다른 것을 구문 분석합니까? – sinisake

+1

두 번째 정규식은'|'문자를 줄무늬로 사용하고 있기 때문에 작동하지 않습니다.이 문자는 정규 표현식에서'OR'을 의미합니다. 패턴에서 실제로'|'를 사용하지 않기 때문에 첫 번째 패턴에서만 작동합니다. 첫번째와 마지막''를 다른 delimeter ('~')로 대체하십시오. –

+0

정규식을 처음 사용하므로이 오류를 인식하지 못해 죄송합니다. 그러나 불행히도 새로운 오류 메시지는 다음과 같습니다. "컴파일에 실패했습니다 : lookbehind 어설 션은 오프셋 22에서 고정 길이가 아닙니다"- 여러 블록 유형을 사용할 수없는 고정 길이가 필요합니까? – mrmrw

답변

1

난 그냥이를 사용합니다 : 여는 태그에 class="xyz" 같은 물건을 차지

~<(h2|p|li|div)([^\>]+)?>([^\<]+)?</(h2|p|li|div)>~ 

합니다.

이렇게하면 입력 한 정규식이 수정되지만 질문 맨 아래에서 설명한 내용을 수행하려면 더 복잡한 것이 필요할 것입니다.

관련 문제