PHP değiştirin, Ama Alternatif Değiştir String

2 Cevap php

Tamam, burada yapmaya çalışıyorum ne: Ben aslında tam bir markdown sınıfını kullanarak değer bir markdown uygulanması tiny alt kümesi, ne değildir geliştirmek için PHP kullanmak çalışıyorum.

Ben aslında bir str_replace yapmanız gerekir, ancak açılışını işlemek ve HTML etiketlerini kapanış şekilde, iğne her geçtiği için değiştirin dize alternatif.

Örneğin, italik * Bu * gibi yıldızlarla bir çift vardır, ve kod blokları \ gibi ters tırnakların çevrili this\.

Ben açılış HTML etiketine karşılık, ve kapanış etiketi ile ikinci olan karakter bir çift ilk geçtiği yerde değiştirmek gerekiyor.

Bunun nasıl herhangi bir fikir? Ben düzenli ifade çeşit dahil olacağını düşündüm ...

2 Cevap

Şahsen ben * veya \ bir sayaç ile her oluşum aracılığıyla döngü olur, ve sayısı ise örneğin sayımı dayalı uygun HTML etiketi (ile karakteri değiştirmek Hatta ve bir yıldız işareti vurmak, bu garip ise o </em>, vb) ile değiştirin, <em> ile değiştirin.

Ama sen sadece her kolay çözüm olabilir daha sonra biçimlendirme bir kaç basit türde, bir düzenli ifade desteklemesi gerekir emin iseniz. Yıldızlarla için böyle bir şey (örneğin, denenmemiş):

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

Ve tersbölülerden için benzer bir şey.

Ne arıyorsanız daha yaygın bir durum makinesi veya lexer / çözümleyici tarafından ele olduğunu.

Bu çirkin ama çalışır. Yakala: bir seferde sadece tek bir desen türü için.

$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>";
}