İlk satır preg_replace Çıkarma

3 Cevap php

Ben HTML BBcode dönüştürmek için bazı PHP yazıyorum.

Ben bu BBcode dönüştürmek istiyorum:

[quote]
Hello World
[/quote]

aşağıdaki:

<blockquote>Hello World</blockquote>

Bu gerçekleştirmek için kullanıyorum preg_replace fonksiyonu:

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);

Bu neredeyse ben bunu gereken her şeyi yapıyor, ama benim sorunum daha önce ve 'Merhaba Dünya' dan sonra \ n yıllardan yoluyla taşır, ve üretiyor olmasıdır:

<blockquote>
Hello World
</blockquote>

Bunu düzeltmek nasıl Herhangi bir fikir? Hepsi çok çok takdir yardımcı olur.

3 Cevap

Bu normal ifade deneyin:

/\[quote\]\s*(.+?)\s*\[\/quote\]/s

Çift tırnak içinde ters bölü kaçmak gerekir. Bunun yerine "\ [", sen "\ \ [" gerekir.

Bir olasılık kullanmak olacaktır 'e' regex-modifier, örneğin, dize trim işlevini çağırmak için.

Kılavuzun bu sayfayı alıntı:

e (PREG_REPLACE_EVAL)
If this modifier is set, preg_replace() does normal substitution of backreferences in the replacement string, evaluates it as PHP code, and uses the result for replacing the search string. Single quotes, double quotes, backslashes (\) and NULL chars will be escaped by backslashes in substituted backreferences.

Only preg_replace() uses this modifier; it is ignored by other PCRE functions.


For instance, this code, only slightly different from yours :

$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;

$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);

Size vermek istiyorum:

string '<blockquote>Hello World</blockquote>' (length=36)

yani, trim fonksiyon eşleşti ne denir - bu dizenin başında ve sonunda tüm beyaz boşlukları kaldırmak unutmayınız; sadece satır atlama aynı zamanda boşluk ve cetveller.

(For instance, you can take a look at Example #4 on the manual page of preg_replace)
(It's maybe a bit overkill in this case, should I add -- but it's nice to know anyway)