2016-04-03 15 views
0

kodunda değilim Şu anda bir forum üzerinde çalışıyorum ve yazılarda tablo bulmak ve bunları BB Koduna dönüştürmek için normal ifadeleri kullanmak istiyorum. Bir web değerlendirici (http://regexr.com) kullandım ve düzenli bir ifade çalıştı. Ben POST aracılığıyla Senaryomun bu metni aktarmak ve <textarea> Fakat bu desen ve var_dump sonuç ile üzerine preg_match_all kullanmakNormal İfade 2 farklı web değerlendiricisinde çalışır ancak

[table] 
abc|def|gih 
123|456|789 
[/table] 

:

/^(\[table\]\s*)^((?:[^\|\r\n]+[\|\n])+)^(\[\/table\])$/m 

formun tabloları algılamak için kullanılır Sadece boş diziler alırım. Mantıksal olarak, değiştirme işlevleri de çalışmaz.

preg_match_all("/^(\[table\]\s*)^((?:[^\|\r\n]+[\|\n])+)^(\[\/table\])$/m", $_POST['test_string'], $tmp); 
var_dump($tmp); 

Bu

array(4) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } } 

PS verir: Ben regexr.com JS tabanlı olduğunu biliyoruz, bu yüzden denedim bir php tabanlı çok, mükemmel çalıştı nerede one.

Düzenleme: Katma codeSample PHP dizeleri kullanımı için normal ifadenin ters eğik çizgi kaçış gerekir

+2

Bazı kodları gönderebilir misiniz? – gmfm

+0

Bildiğim kadarıyla, herhangi bir dil dizelerde özel karakterden kaçınılmasını gerektirir. Yani ilk başta "\" yerine "\\" ile değiştirmeyi deneyin. Örneğin. "\ n" "yeni satır" anlamına gelir ve "\\" tek ters eğik çizgi demektir. –

cevap

0

:

$pattern = "/^(\\[table\\]\\s*)^((?:[^\\|\\r\\n]+[\\|\\n])+)^(\\[\\/table\\])$/m"; 

Eğer regexr gibi bir site kullanmaya devam etmek isterseniz, regex101.com deneyin yerine. Düzenli bir ifade yazdıktan sonra, Tools > code generator'a tıklayabilir ve size PHP'de kullanıma hazır olan kodu gösterecektir.

+0

İyi görünüyor ama sorun şu ki bu sadece bir değişken doğrudan php betiğindeki dize ile tanımladığımda çalışır. Ben POST ve bir textarea ile benim komut dosyası için iletilen dize denediğimde, artık işe yaramıyor (muhtemelen hangi sebeple olursa olsun linebreaks algılamıyor). 'dizisi (4) {[0] => dize (40)" [table] abc | def | gih 123 | 456 | 789 [/ table] "[1] => string (8)" [table] "[[ 2] => string (24) "abc | def | gih 123 | 456 | 789" [3] => string (8) "[/ table]"} string (40) "[tablo] abc | def | gih 123 | 456 | 789 [/ table] " array (0) {} string (43)" [table] abc | def | gih 123 | 456 | 789 [/ table] "' 1 komut dosyasında, 2 POST – FallenWarrior

+0

Edit: Çalıştı, ancak önce girdiyi yeni çizgiler üzerinde patlatmak zorunda bıraktım, düzeltdim ve sonra yapıştırıcı olarak satır besleme ile geri çektim. – FallenWarrior

+0

Girişte boşluk bıraktığınız gibi görünüyor. Normal ifadeleriniz nispeten katıdır. Ben normalde patlatmak/trim/implode kullanarak etrafında çalışmaktan daha düzenli düzeltmek istiyorum. Belki de son '[\/table \]' dan sonra 's *' yazmayı deneyin. –