2010-11-29 22 views
14
Böyle bir dizesinden aşırı boşluğu kaldırmak çalışıyorum

:php çıkarmadan aşırı boşluk

merhaba             Dünya

merhaba dünya

için

Bunu PHP'de nasıl yapabileceğine dair herhangi bir fikri olan var mı? Bir regexp ile

cevap

28

: Ayrıca her çoklu beyaz karakterleri kaldırmak istiyorsanız

preg_replace('/()+/', ' ', $string); 

, sen \ s kullanabilirsiniz

preg_replace('/(\s)+/', ' ', $string); 
+2

Düzenlerinizdeki parantez gerekli değildir. – alex

4
$str = 'Why do I 
      have so much white space?'; 

$str = preg_replace('/\s{2,}/', ' ', $str); 

var_dump($str); // string(34) "Why do I have so much white space?" 

See it! (\ s beyaz karakterdir)

+ niceleyiciyi de kullanabilirsiniz, çünkü her zaman r onu ile değiştirir. Ancak, niyetinizi göstermek için {2,} buluyorum. Orada preg_replace belgelerinde

+0

Bunu denedim, ancak metnin başına ya da sonuna boşluk bırakmaz. Dize, $ str = 'Çok fazla boşluk içeren metin' ise, '' Çok boşluklu metin '' döndürür. 'Çok boşluklu metin' bekliyorum. – Mai

+0

@Mai Çünkü kod boşlukları kaldırmaz, onları birer birer çöker. Dizgiyi kırpmak istiyorsanız, trim() 'seçeneğini kullanın. – alex

0

Benim dilim değil, ama fikir, birden fazla boşlukları tek boşluklarla değiştirmektir. \s, beyaz boşluk anlamına gelir ve +, bir veya daha fazla anlamına gelir. Sonunda g, global olarak yapmak anlamına gelir (yani, birden fazla kez).

+0

Örneğin '\ s \ s +' vardır. Niye ya? Bir artı işareti yerine yıldız kullanıp kullanmadıklarını anlayabiliyorum. Yıldız işareti sıfır veya daha fazla yineleme anlamına gelir. Bu nedenle, normal ifadeyi ikiye katlamak zorundasınız. Ancak, artı bir veya daha fazla anlamına gelir. Belirli bir nedeni var mı? Hala çalışmalı, ama gereksiz görünüyor. –

+1

W. Bunun sebebi sadece 2 ya da daha fazla alanda eşleşmesini sağlamaktır - sadece bir alan varsa, değiştirmeye gerek yoktur. Bu, tesadüfen, alex'ın cevabında olduğu gibi '\ s {2,}' ye eşdeğerdir. –

0

Değil bir PHP uzmanı aşırı boşluk şerit nasıl bir örnektir, ama REGEX göre bir iş yaptığı sesler .... Yine

<?php 
$string = 'Hello  World  and Everybody!'; 
$pattern = '/\s+/g'; 
$replacement = ' '; 
echo preg_replace($pattern, $replacement, $string); 
?> 

, PHP