Bu tekrarlanan ifade keyfi büyük, özellikle eğer gerçekten bir regex ile çözmek için verimsiz bir sorun. Pratik olarak, sadece 3-5 gibi bir şey tekrarlanan ifade uzunluğunu kapağı için yeterli shold, ve çok daha kolay olmalıdır.
Gibi bir şey
$title = preg_replace('/(\W{1,5})(?=\1+)/', '', $title);
çalışması gerekir.
Bazı ön test gösteriyor ki
$title = 'Buy my product !!!!!!!!!!!!!!!!!!!!!!!! Buy my product !? !? !? !? !? !? Buy my product !!!!!!!!!.......!!!!!!!! Buy my product <-----------';
$title = preg_replace('/(\W{1,5})(?=\1{2,})/', '', $title);
echo $title;
çıktısı
Buy my product !! Buy my product !? !? Buy my product !!..!! Buy my product <--
Bu, tüm test durumları geçmek için görünür.
Re: Gordon
Sizin dize:
¸·´`·¸·´`·¸·´`·¸ Human ·-> creativity << is endless !¡!¡! ☻☺
İlk bölümde iki katından daha fazla bir şey ama tekrar etmez. Bu gerektirecek gibi görünüyor:
$title = preg_replace('/(\W{1,9})(?=\1{2,})/', '', $title);
o kadar kolaylaştırır önce
¸·´`·¸·´`·¸ Human ·-> creativity << is endless !¡!¡! ☻☺
(- Oh iyi Hangi preg_replace Unicode farkında olmadığını ima)
Ayrıca sadece bir kez tekrarlamak için ayarlayabilirsiniz:
$title = preg_replace('/(\W{1,9})(?=\1+)/', '', $title);
bir hale gelir ki bu durumda:
¸·´`·¸ Human ·-> creativity < is endless !¡! ☻☺
Puanınızı o az iki kez tekrarlamak için gerekli olsa bile "ASCII sanatı" birçok oluşturmak mümkün olduğunu ise, iyi, dışarıdaki bu sorunun kapsamı bulunuyor. Minimumda ASCII sanatı tutma amaçları için, ben gibi bir şey kullanarak sadece öneriyoruz:
preg_replace('/(\W{5})\W+/', '$1', $title);
(Yani sadece bir satırda görüntülenebilir alfasayısal olmayan karakter sayısını kap., Bu Rusya gibi, non-Latin alfabelerinde dilleri ile uyumluluk için ayarlanması gerekir unutmayın.)