Özyinelemeli "wiki tarzı" için regex

4 Cevap php

I () (preg_replace_callback kullanarak) gibi "wiki tarzı" listeleri eşleştirmek için bir Düzenli İfade oluşturmak çalışıyorum:

* List Item 1  
* List Item 2  
*# List Item 2.1  
*# List Item 2.2  
* List Item 3 

Sayı-İşaretler Sıralı Listeler işaret ederken, Yıldız Sırasız Listeler göstermektedir. Ben sonsuz derinliği maç böylece bu almak için çalışıyorum ve böylece * ve # karışık olabilir.

I tried the following expression (and variations of it): /\s([\*#]{1,}) ([\S ]+)\s/si
But it doesn't seem to want to work.

Ben yanlış ne yapıyorum? Ya da bu gerçekleştirmenin daha iyi bir yolu var mı?

4 Cevap

Böyle bir şey deneyin:

\s*([*#]+)\s+.*

Emin değilim tam olarak size aradığınızı anlıyorum, ama ([*#]{1,}) ([\S ]+) işe yaramazsa? Eğer bu sizin için ne arıyorsanız eğer, bu grup 2 için grup 1 ve "Liste Ürün 2.1" için size * ve *# bir maç verecektir düşünüyorum. Ben bu ne vardı aslında biliyorum, ama bunu test ederken ben onunla herhangi bir sorun sahip değilim.

Düzenli ifadeler genellikle özyinelemeli değildir. Sen (geçişleri kontrol etmek için düzenli ifadeler kullanarak belki de iç içe devlet makine) daha geleneksel bir ayrıştırma yaklaşımı kurmak gerekir.