PHP biçimlendirme ayarlarını Regex - BBCode

3 Cevap php

Dürüst olmak gerekirse, ben RegexBuddy kullanmak, çok regex beceremiyoruz, ama benim Mac üzerinde çalışıyorum ve bazen de (benim için) pek yardımcı olmuyor.

Eh, yapmam gereken ne için php bir işlevdir

function replaceTags($n)
{
    $n = str_replace("[[", "<b>", $n);
    $n = str_replace("]]", "</b>", $n);
}

Bu durumda kötü bir örnek olsa da birileri]] veya [[, neyse, sen regex yardımcı olabilir kullanarak etiketini kapatın vermedi:

[[]] = Bold format

**** = Italic format

(()) = h2 heading

Bunlar, teşekkürler ben ihtiyacınız vardır :)

PS - Mac (Snow Leopard) için kullanılabilir RegexBuddy gibi herhangi bir yazılım var mı?

3 Cevap

function replaceTags($n)
{
    $n = preg_replace("/\[\[(.*?)\]\]/", "<strong>$1</strong>", $n);
    $n = preg_replace("/\*\*(.*?)\*\*/", "<em>$1</em>", $n);
    $n = preg_replace("/\(\((.*?)\)\)/", "<h2>$1</h2>", $n);
    return $n;
}

Herhalde biraz açıklama vermelidir: "..? (*)" Bu regex talimatlarına ("[", "(", vb) gibi muamele değil bu yüzden her özel karakterin bir ters eğik çizgi öncesinde sizin ayraçları arasındaki bütün karakterleri yakalar (vb, "[[" ve ​​"]]"). What yakalanan oluyor "$ 1" yerine yedek dizesinde sonra çıktı.

Eğer bu yapamazsınız aynı nedenle str_replace() de preg_replace() için geçerlidir. % 100 doğruluk verim ve giriş hataları karşılamak istiyorsanız Tag-pair tarzı ayrıştırma bir lexer / çözümleyici gerektirir.

Düzenli ifadeler kapatılmamış etiketleri, yuvalanmış etiketleri, bu tür bir şey işleyemez.

Tüm bu söyleniyor, çok az çaba ile orada yol% 50 alabilirsiniz.

$test = "this is [[some]] test [[content for **you** to try, ((does [[it]])) **work?";

echo convertTags( $test );

// only handles validly formatted, non-nested input
function convertTags( $content )
{
  return preg_replace(
      array(
          "/\[\[(.*?)\]\]/"
        , "/\*\*(.*?)\*\*/"
        , "/\(\((.*?)\)\)/"
      )
    , array(
          "<strong>$1</strong>"
        , "<em>$1</em>"
        , "<h2>$1</h2>"
      )
    , $content
  );
}

Değiştiriciler de yardımcı olabilir :)

http://lv.php.net/manual/en/reference.pcre.pattern.modifiers.php

U (PCRE_UNGREEDY) This modifier inverts the "greediness" of the quantifiers so that they are not greedy by default, but become greedy if followed by ?. It is not compatible with Perl. It can also be set by a (?U) modifier setting within the pattern or by a question mark behind a quantifier (e.g. .*?).