문제

좋아, 여기 내가하려는 일이있다 : 나는 PHP를 사용하여 본질적으로 무엇을 개발하려고 노력하고있다. 매우 작은 전체 Markdown 클래스를 사용하는 가치가없는 Markdown 구현의 하위 집합.

본질적으로 str_replace가 필요하지만 개방 및 닫는 HTML 태그를 처리하기 위해 바늘의 발생마다 교체 문자열을 번갈아 가십시오.

예를 들어, 이탤릭체는 *this *와 같은 별표 쌍이며 코드 블록은`this '와 같은 백 티크로 둘러싸여 있습니다.

문자 한 쌍의 첫 번째 발생을 오프닝 HTML 태그에 해당하고 두 번째는 닫는 태그로 교체해야합니다.

이 작업을 수행하는 방법에 대한 아이디어가 있습니까? 나는 일종의 정규 표현이 관련 될 것이라고 생각했다 ...

도움이 되었습니까?

해결책

개인적으로, 나는 각각의 발생을 통해 반복됩니다 * 또는 \ 카운터를 사용하고 카운트를 기준으로 적절한 HTML 태그로 문자를 교체하십시오 (예 : 카운트가 고르게 있고 별표에 도달 한 경우 교체하십시오. <em>, 이상하다면 대체하십시오 </em>, 등).

그러나 몇 가지 간단한 종류의 마크 업만 지원하면되면 각각의 정규 표현이 가장 쉬운 솔루션 일 수 있습니다. 예를 들어 별표에 대한 것과 같은 것 (예 : 비정상적인) :

preg_replace('/\*([^*]+)\*/', '<em>\\1</em>', $text);

그리고 백 슬래시와 비슷한 것.

다른 팁

당신이 찾고있는 것은 State Machine 또는 Lexer/Parser가보다 일반적으로 처리합니다.

이것은 못 생겼지 만 작동합니다. 캐치 : 한 번에 하나의 패턴 유형에 대해서만.

$input = "Here's some \\italic\\ text and even \\some more\\ wheee";

$output = preg_replace_callback( "/\\\/", 'replacer', $input );

echo $output;

function replacer( $matches )
{
    static $toggle = 0;
    if ( $toggle )
    {
        $toggle = 0;
        return "</em>";
    }
    $toggle = 1;
    return "<em>";
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top