문제

이것이 내가 지금까지 가지고있는 것입니다.

<?php
$text = preg_replace('/((\*) (.*?)\n)+/', 'awesome_code_goes_here', $text);
?>

나는 일반 텍스트 목록을 다음의 형식으로 성공적으로 일치시킵니다.

* list item 1
* list item 2

나는 그것을 대체하고 싶다 :

<ul>
  <li>list item 1</li>
  <li>list item 2</li>
</ul>

나는 머리를 감싸는 주위에 머리를 잡을 수 없다 <ul> 그리고 반복 <li>에스! 누구든지 도와 줄 수 있습니까?

편집 : 아래 답변대로 솔루션 ...

내 코드는 이제 읽습니다.

$text = preg_replace('/\* (.*?)\n/', '<ul><li>$1</li></ul>', $text);
$text = preg_replace('/<\/ul><ul>/', '', $text);

그게 해냈어!

도움이 되었습니까?

해결책

한 가지 옵션은 각 목록 항목을 간단히 바꾸는 것입니다. <ul><li>list item X</li></ul> 그런 다음 두 번째 교체를 실행하여 대체 할 수 있습니다. </ul><ul> 아무것도없이.

다른 팁

나는 이것이 오래된 게시물이라는 것을 알고 있지만 해결책이 필요합니다. 이 시도! :)

$text = preg_replace("/\[ul\](.*)\[\/ul\]/Usi", "<ul>\\1</ul>", $text);
$text = preg_replace("/\[li\](.*)\[\/li\]/Usi", "<li>\\1</li>", $text);

나는 Regex의 전문가가 아니지만 원하는 패턴을 일치시키고 원하는 패턴을 ()의 ()를 둘러싸고 ()의 패턴으로 캡처하는 것입니다. 그런 다음 "멋진 코드 섹션"에 $ 1 (첫 번째 백색 참조 등)을 배치 할 수 있습니다.

Regex Buddy 더 필요한 경우 정규 표현에 대한 정말 멋진 튜토리얼이 있습니다.

당신은 사용할 수 있습니다 preg_match_all 모든 항목을 일치시킨 다음 UL 및 LI 태그 내에서 다시 작성합니다.

나는 이것이 당신이 원하는 것이라고 생각합니다

<?php

$text = <<<TEXT
* item
* item
TEXT;

$html = preg_replace( "/^\\* (.*)$/m", "<li>\\1</li>", $text );

echo '<ul>', $html, '</ul>';
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top