2010-03-03 9 views
138

मैं एक ही स्थान के साथ एकाधिक रिक्त स्थान को प्रतिस्थापित करने की कोशिश कर रहा हूं। जब मैं ereg_replace का उपयोग करता हूं, तो मुझे इसे बहिष्कृत करने में त्रुटि मिलती है।php एक ही स्थान के साथ एकाधिक रिक्त स्थान

ereg_replace("[ \t\n\r]+", " ", $string); 

क्या इसके लिए एक समान प्रतिस्थापन है। मुझे एक ही सफेद स्थान के साथ कई " " सफेद रिक्त स्थान और एकाधिक nbsp सफेद रिक्त स्थान को प्रतिस्थापित करने की आवश्यकता है।

उत्तर

297

उपयोग preg_replace() और बजाय [ \t\n\r] उपयोग \s:

$output = preg_replace('!\s+!', ' ', $input); 

से Regular Expression Basic Syntax Reference:

\ घ, \ w और \ रों

आशुलिपि चरित्र वर्गों अंक, शब्द वर्ण मिलान (अक्षरों, अंक, और अंडरस्कोर), और सफेद स्थान (रिक्त स्थान, टैब, और रेखा ब्रेक)। चरित्र वर्गों के बाहर और के अंदर उपयोग किया जा सकता है।

+0

@Cletus: यह अंतरिक्ष के साथ एक ही स्थान को प्रतिस्थापित करेगा। क्या आपको ऐसा कुछ नहीं लगता है: preg_replace ('/ (?: \ S \ s + | \ n | \ t) /', '', $ x) अधिक * कुशल * विशेष रूप से कई एकल रिक्त स्थान वाले टेक्स्ट पर होगा? – codaddict

+21

@ कोडडिक्ट: मौके से, एक पल पहले मैंने वास्तविक जीवन डेटा, परिणाम (8300 विभिन्न टेक्स्ट लेखों पर कॉल के लिए) पर बेंचमार्क किया था: '/ (?: \ S \ s + | \ n | \ t) /' = > 1410 (सबसे धीमा), '/ \ s + /' => 611 (ठीक है), '/ \ s \ s + /' => 496 (सबसे तेज़)। अंतिम व्यक्ति एकल '\ n' या' \ t' को प्रतिस्थापित नहीं करता है, लेकिन यह मेरे मामले के लिए ठीक है। – Frunsi

+13

/\ s {2,}/u '- यदि आपके पास कुछ यूटीएफ -8 समस्या है, तो आप – user956584

33
preg_replace("/[[:blank:]]+/"," ",$input) 
+3

में होना अच्छा लगेगा "\ n" (PHP 5.3), "/ \ s + /" काम पूरा हो गया। ;) – Marek

+1

असल में इससे मदद मिली, मेरे मल्टीबाइट शब्द को गड़बड़ कर दिया, किसी प्रकार के वर्ग के साथ Š को बदल दिया। –

+0

@ मार्टिस्सब्रीडिस अलग मल्टीबाइट फ़ंक्शन है: http://php.net/manual/en/function.mb-ereg-replace.php –

29
$output = preg_replace('/\s+/', ' ',$input); 

\ रों [ \t\n\r] के लिए आशुलिपि है। एकाधिक रिक्त स्थान एक स्थान के साथ प्रतिस्थापित किया जाएगा।