2009-07-25 7 views
13

$data टैब, अग्रणी रिक्त स्थान और एकाधिक रिक्त स्थान शामिल हैं। मैं सभी टैब को एक स्पेस से बदलना चाहता हूं। एक ही स्थान के साथ एकाधिक रिक्त स्थान, और प्रमुख रिक्त स्थान हटा दें।PHP में चर के भीतर रिक्त स्थान वाले टैब को मैं कैसे बदलूं?

वास्तव में somthing है कि इस इनपुट डेटा बारी होगा: आउटपुट डेटा में

[ asdf asdf  asdf   asdf ] 

:

[asdf asdf asdf asdf] 

मैं यह कैसे करते हो?

+0

आप परवाह किए बिना पट्टी * सभी * टैब कोशिश कर रहे हैं या आप स्वरूपण बनाए रखने के स्तंभ के लिए किसी भी इच्छा है? – Synetech

+0

मुझे लगता है कि आपको उत्तरों का दोबारा मूल्यांकन करना चाहिए और एक अलग स्वीकार करना चाहिए। – Jeff

उत्तर

14
$data = trim(preg_replace('/\s+/g', '', $data)); 
+0

आप प्रमुख रिक्त स्थान से छुटकारा पाने के लिए ट्रिम का उल्लेख करना भी भूल गए हैं। शायद एलटीआईएम का भी उल्लेख करना चाहते हैं, क्योंकि उन्होंने प्रमुख रिक्त स्थान के लिए कहा था, फिर दोनों सिरों को चित्रित किया। –

+0

हाँ, यह इंगित करने के लिए धन्यवाद। उदाहरण में यह दिखाया गया है कि अग्रणी और पीछे की दोनों जगहों को हटा दिया जाना चाहिए, इसलिए मैंने अपना कोड अपडेट किया। – RaYell

+0

सहायक। [preg_replace] (http://php.net/manual/en/function.preg-replace.php) पैटर्न की सभी घटनाओं को प्रतिस्थापित करने के लिए डिफ़ॉल्ट है, जब तक आप सीमा पैरामीटर निर्दिष्ट नहीं करते हैं। – JustinP

1
$data = trim($data); 

अपने प्रमुख (और अनुगामी) रिक्त स्थान से छुटकारा हो जाता है।

$pattern = '/\s+/'; 
$data = preg_replace($pattern, ' ', $data); 

जो एक या अधिक रिक्त स्थानों के किसी भी संग्रह को केवल एक स्थान में बदल देता है।

$data = str_replace("\t", " ", $data); 

यह आपके टैब से छुटकारा पाता है।

+0

के बीच चाहता है यदि आप '\ s' का उपयोग कर रहे हैं तो आपको' \ t' – Jeff

3

वर्ग कोष्ठक मान लिया जाये कि स्ट्रिंग का हिस्सा नहीं हैं और तुम सिर्फ निदर्शी प्रयोजनों के लिए उन्हें का उपयोग कर रहे है, तो:

$new_string = trim(preg_replace('!\s+!', ' ', $old_string)); 

आप ऐसा करने में सक्षम हो सकता है एक भी regex के साथ, लेकिन यह होगा कि एक काफी जटिल regex हो। उपर्युक्त अधिक सरल है।

नोट: मैं यह भी मान रहा हूं कि आप "एबी सीडी" के साथ "एबी \ टी \ टीसीडी" (\ t एक टैब है) को प्रतिस्थापित नहीं करना चाहते हैं।

+0

की आवश्यकता नहीं है जवाब। मैंने अपने उत्तर को सिर्फ अपने दावे को खारिज करने के लिए पोस्ट किया है कि 'preg_replace' के साथ ट्रिम करना "जटिल" है। – Jeff

+0

सौंदर्य उत्तर। धन्यवाद। – mghhgm

2
$new_data = preg_replace("/[\t\s]+/", " ", trim($data)); 
+0

यदि आप '\ s' का उपयोग कर रहे हैं तो आपको' \ t' – Jeff

16

ट्रिम, एकल रिक्तियों के साथ टैब और अतिरिक्त रिक्त स्थान की जगह:

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data)); 
+1

की आवश्यकता नहीं है, इससे मुझे बहुत मदद मिली, धन्यवाद –

+0

सबसे पहले, यह एक घबराहट पैटर्न है। दूसरा, के रूप में आप यह लिखा था, यह पुन: स्कैन नहीं करता है, और इसलिए यह '' tab' space' '' tab' space' '' tab' space' के एक रन के लिए कई रिक्त स्थान का उत्पादन करेगा। क्या आपने इसका परीक्षण किया? – Jeff

-1

बस इस regex

$str = trim(preg_replace('/\s\s+/', ' ', $str)); 

यह एक अंतरिक्ष से सभी टैब और रिक्त स्थान का स्थान ले लेगा का उपयोग करें,

यहां रेगेक्स में + पर हस्ताक्षर करें एक या अधिक बार, पेटी आरएन का मतलब है कि जहां कहीं भी दो या अधिक रिक्त स्थान हैं, इसे एक स्थान

+0

शून्य से एक पैटर्न है कि एक एकान्त टैब (और पोस्ट करने से पहले अपने समाधान का परीक्षण नहीं करने के लिए) से मेल करने में विफल रहता है। – Jeff

0

यह उत्तर पूरी तरह से सचमुच प्रश्न लेता है: यह केवल रिक्त स्थान और टैब से संबंधित है। दी, ओपी शायद भी क्या छंटनी/संकुचित हो जाता है में खाली स्थान के अन्य प्रकार शामिल हैं, लेकिन के वह एम्बेडेड सीआर और/या वामो संरक्षित करने के लिए चाहता है नाटक जाने के लिए चाहता है।

सबसे पहले, चलिए कुछ स्थिरांक स्थापित करते हैं। यह समझ और रखरखाव की आसानी दोनों की अनुमति देगा, संशोधनों को आवश्यक होना चाहिए। मैंने कुछ अतिरिक्त रिक्त स्थान डाले ताकि आप समानताएं और मतभेदों की तुलना आसानी से कर सकें।

define('S', '[ \t]+'  ); # Stuff you want to compress; in this case ONLY spaces/tabs 
define('L', '/\A'.S.'/' ); # stuff on the Left edge will be trimmed 
define('M', '/'.S.'/' ); # stuff in the Middle will be compressed 
define('R', '/'.S.'\Z/'); # stuff on the Right edge will be trimmed 
define('T', ' '   ); # what we want the stuff compressed To 

हम \A और \Zescape characters उपयोग कर रहे हैं शुरुआत है और इस विषय के अंत निर्दिष्ट करने के लिए, ठेठ ^ और $ जो लाइन उन्मुख meta-characters हैं के बजाय। यह इतना नहीं है क्योंकि इस उदाहरण में उन्हें "रक्षात्मक" प्रोग्रामिंग के रूप में आवश्यक है, तो भविष्य में उन्हें आवश्यक बनाने के लिए S का मूल्य बदलना चाहिए।

अब गुप्त सॉस के लिए: हम preg_replace की कुछ विशेष अर्थ विज्ञान का लाभ लेने के लिए जा रहे हैं, अर्थात् (जोर जोड़ा)

अगर वहाँ प्रतिस्थापन में कम तत्वों सरणी की तुलना में कर रहे हैं पैटर्न सरणी, किसी भी अतिरिक्त पैटर्न को एक खाली स्ट्रिंग द्वारा प्रतिस्थापित किया जाएगा।

function trim_press($data){ 
    return preg_replace([ M, L, R ], [ T ], $data); 
} 

बजाय का एक पैटर्न स्ट्रिंग और प्रतिस्थापन स्ट्रिंग, हम एक पैटर्न सरणी और प्रतिस्थापन सरणी, जो अतिरिक्त पैटर्न L और R छंटनी की जा रही में परिणाम का उपयोग कर रहे हैं।

0

यदि आपको   भी निकालना है।

$data = trim(preg_replace('/\s+|nbsp;/g', '', $data)); 
संबंधित मुद्दे