Regex, parantezler, hatta iç içe etiketleri etiketleri değiştirilmesi

2 Cevap php

Example

preg_replace('/\{[a-zA-Z.,\(\)0-9]+\}/', 'Replaced', 'Lorem ipsum dolor sit {tag1({tag2()})}, consectetur adipiscing elit.');

Sonuç:

Lorem ipsum dolor sit {tag1 (Değişti)}, consectetur adipiscing elit.

Question

As you can see "tag2" has been replaced, But I want to replace "tag1" Do anyone know how I can do this?

(: Böylece {tag1({tag2({tag3()})})}) ve bazı durumlarda bu gibi olabilir.)

Btw Aslında preg_replace_callback kullanıyorum, ancak daha kolay preg_replace ile göstermek için

http://www.spaweditor.com/scripts/regex/index.php: Burada kodu test bir sitedir

2 Cevap

Eğer karakter kümesine kaşlı ayraçları eklemek gerekir. Burada kullanılan desen bulunuyor:

/\{[a-zA-Z.,\(\)\{\}0-9]+\}/

Ve burada sonuç oldu:

"Lorem ipsum dolor sit Replaced, consectetur adipiscing elit."

Iç içe geçmiş desen eşleştirme hakkında konuşmaya başladığınızda (örneğin: gibi bir şey iç parantez grubu uyan (foo (bar) fu)), sonra regex yanlış araçtır. Düzenli ifadeler bu durumda, birçok parantez açık nasıl saymak anlamına gelir ki, vatansız.

Eğer böyle bir şey yapmak isteyen varsa, bir parser içine bakmak gerekebilir