Arasındaki köşeli ve bir şey çıkarmak için regex yardıma ihtiyacınız var

3 Cevap php

Nasıl köşeli parantez ve parantez kendi aralarındaki metin kaldırabilirim?

For example, I need hello [quote="im sneaky"] world

olmaya

hello world

İşte ben kullanmaya çalışıyorum, ama bu hile yapıyor değil ne

preg_replace("/[\[(.)\]]/", '', $str);

I just end up with hello quote="im sneaky" world

Teşekkürler

3 Cevap

[Ve] bir regex özel karakterlerdir. Onlar bir maç karakterleri listelemek için kullanılır. [a-z] "a" ve "z" arasında herhangi bir küçük harf eşleşir. [03b], bir "0", "3", ya da "b" ile eşleşir. Karakterleri eşleştirmek için "[" ve ​​"]", siz onları kaçmak zorunda önceki \.

Sizin kodu şu anda (eğer netlik için bunları yazdığınız düzenden yeniden düzenlenebilir) "boş bir dize ile [](). herhangi bir karakteri değiştirmek" diyor.


Açgözlü maçı:

preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ]

Bir açgözlü maç birden [s ve] maç s olabilir. Bu ifade an example [of "sneaky"] text [with more "sneaky"] here almak ve an example here haline çevirmek istiyorsunuz.


Perl olmayan açgözlü maç (büyük olasılıkla açgözlü olmak istemiyorum) için bir sözdizimi vardır:

preg_replace('/\[.*?\]/', '', $str);

Açgözlü olmayan maçlar mümkün olduğunca az karakterleri yakalamaya çalışın. Aynı örneği kullanarak: an example [of "sneaky"] text [with more "sneaky"] here olur an example text here.


Sadece] takip eden ilk kadar:

preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ]

Bu daha açık, ama okumak zordur. Aynı örnek metni kullanarak, olmayan açgözlü ifade çıktı almak istiyorum.


Boşluk ile açıkça bu anlaşma hiçbiri unutmayın. Her iki tarafında [ve] üzerine alanlarda kalacaktır.

Ayrıca tüm bu biçimlendirilmiş giriş için başarısız olabilir unutmayın. Maçlar olmadan birden [s ve] s şaşırtıcı bir sonuca neden olabilir.

Sadece eğer bir özyinelemeli kaldırılması için arıyoruz:

$str = preg_replace("/\[([^\[\]]++|(?R))*+\]/", "", $str);

Bu dönüşecektir:

Bu [metin [daha fazla metin]] serin

Bunun için:

Bu serin

Ben bir grup beri aslında dış destekleri için Pars istiyorum düşünüyorum. köşeli parantez ifadeler bir dizi vardır. Not So bunu yazın nasıl emin.

/(\\[.*\\])/