2012-06-21 4 views
0

정렬되지 않은 목록으로 시작하는 콘텐츠 문자열이 있습니다. 내 홈페이지에서이 콘텐츠의 요약을 만들고 싶습니다. 첫 번째 정렬되지 않은 목록과 일치해야하며 미리보기에서 5 개의 목록 항목 만 표시해야합니다. 이 정규식을 사용하여 전체 UL 태그 :문자열에서 첫 번째 정렬되지 않은 목록을 일치시키고 첫 번째 목록 항목을 선택하려면 어떻게합니까?

/<\s*ul[^>]*>(.*?)<\s*/\s*ul>/s 

는 온라인 정규 표현식 테스터에서 잘 작동하지만 알 수없는 수정을 얻을 '\'내가하는 일을 몰라? 또한 전체 정렬되지 않은 목록을받은 후 어떻게 예를 들어 첫 번째 5 개 목록 항목을 선택할 수 있습니다

<ul class="mylist"> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
    <li>Lorem Ipsum Dolor Sit Amet</li> 
</ul> 

을 나는 첫 번째 5 개 <li> 태그와 같은 일을 만들려면, 그래서 나는 정규식 또는 일부를 사용한다 PHP에서 다른 방법?

그리고 미리 감사드립니다.

+2

내부의'/'를'\ s * \/\ s'로 이스케이프하지만 실제로는 적절한 HTML 구문 분석 라이브러리를 사용해야합니다. 그것은 당신의'/ \ s'를 정규 표현식의 끝으로 해석하고 있습니다. 여기서'\ s'는 알려진 수정 자로 해석 할 수 없습니다. –

+1

또는'~ pattern ~'과 같은 다른 문자로 전체를 구분할 수 있으므로 슬래시를 벗어날 필요가 없습니다. –

+0

답변을 수락해야합니다. – Tareq

답변

2
/<\s*ul[^>]*>(.*?)<\s*/\s*ul>/s 

구분 기호로 사용할 경우 /을 이스케이프 처리해야합니다.

/<\s*ul[^>]*>(.*?)<\s*\/\s*ul>/s 

는 PHP에서 당신은하지만, 구분 기호로 모든 문자를 사용할 수 있습니다

#<\s*ul[^>]*>(\s*<li>.+?</li>){5}#sm 

5 <li>의 일치합니다 :

#<\s*ul[^>]*>(.*?)<\s*/\s*ul>#s 

당신은 패턴을 반복 할 수 있습니다. 그래도 별도로 액세스 할 수는 없습니다. 해당 반복 그룹을 언 롤하거나 두 번째 식을 실행하여 <li>을 추출 할 수 있습니다.

관련 문제