2009-10-27 5 views
0

두 개의 단락 태그 중에서 내용을 추출하고 <br /> 태그로 분리해야합니다. 또한정규식을 사용하여 두 개의 * html 태그 찾기

<p> 
Yay... 
</p> 

, 그것을이다 : 입력 그래서

그것은 내가 지금까지 가지고하는 것이 첫 번째 단락 태그를 가져옵니다 <p><?php preg_match('/<p>(.*)<\/p>/', $content, $match); echo($match[1])."..."; ?></p>입니다

<p> 
Yay <br /> 
StackOverflow 
</p> 

처럼 할 필요가

<p> 
Yay 
</p> 
<p> 
StackOverFlow 
</p> 

같다 글자 수 제한을 설정할 수 있습니까? 최대 40 자 (예 : 단락 모두) 또는 substr을 사용해야합니까?

감사합니다.

그래서 그것은 밝혀졌다 :

<?php $content = preg_replace('/<\/p>\s*<p>/', '<br/>', $content); echo substr("$content",0,180)."..."; ?> 
+3

왜 이런 식으로해야할까요? 이것은 음모입니다. – Welbog

+0

Regex를 HTML 매칭 용으로 사용하는 것 외에도,'. *'구문을 사용하지 않는 것이 좋습니다. 그 구성 요소는 욕심이 많으며 작은 샘플에서 기대하는대로 수행 할 수 있지만 많은 양을 "먹습니다" 일치하는 끝 패턴이 나중에 다시 발견되는 경우에 더 많습니다. – Lucero

답변

4

나는 그것이 당신이 필요로하는 것보다 더 복잡하게 만들고 있다고 생각합니다.

<p>Yay</p><p>StackOverFlow</p> 

로 :

<p>Yay<br />StackOverflow</p> 

그럼 그냥 <br>에 대한 </p><p>의 인스턴스를 대체 : preg_replace('/<\/p>\s*<p>/', '<br/>', $input) 당신이 붕괴 할 점을 감안.


그러나 일반적으로 이러한 종류의 복잡한 구문 분석에 정규 표현식을 사용하면 위험 할 수 있습니다. 더 간결하게 :

"문제가 발생하면 '정규식을 사용합니다.'라고 생각하는 사람들이 있습니다. 이제는 두 가지 문제가 있습니다. " - Jamie Zawinski

+2

어쩌면 그게'

\ s *

'이어야합니다, 그들 사이에 개행 문자가있는 것처럼 보입니다 – Kip

+0

위험에 처한 것에 대해 제가 의미하는 것을보십시오? ;) 캐치를 가져 주셔서 감사합니다, 킵. –

+0

이것은 그가


으로 바꾼다고 가정합니다. 그럴까요? – Jay

6

HTML 구문 분석기 (예 : DOMDocument::loadHTML)를 사용하십시오. 더 쉽고 깨지기 쉽습니다.

관련 문제