PHP 교체하지만 교체 문자열을 교체하십시오
문제
좋아, 여기 내가하려는 일이있다 : 나는 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>";
}