2012-05-18 9 views
6

के बीच एक खाली को अनुमति दें, मैं स्ट्रिंग से अत्यधिक रिक्त रेखाएं निकालना चाहता हूं, लेकिन प्रत्येक पंक्ति के बीच एक खाली रेखा को अनुमति देना चाहता हूं। जैसा:स्ट्रिंग से रिक्त लाइनों को निकालें, लेकिन प्रत्येक पंक्ति

line1 





line2 

बन चाहिए:

line1 

line2 

मैं निम्नलिखित regex (भूल गया जहां मैं यह पाया) मिला:

preg_replace('/^\n+|^[\t\s]*\n+/m','',$message); 

यह काम करता है, लेकिन बाहर निकले बिना सभी खाली लाइनों को हटा प्रत्येक पंक्ति के बीच एक खाली रेखा।

संपादित करें: मैं सिर्फ http://jsfiddle.net/RAqSS/

+0

क्या आपका मतलब: "बन चाहिए: पंक्ति 1 \ n \ n पंक्ति 2"? –

+0

मूल रूप से यदि प्रत्येक पंक्ति के बीच 2 से अधिक खाली रेखाएं हैं, तो इसे केवल एक तक छंटनी चाहिए। तो मूल रूप से शेष खाली रेखा 1 एम के बराबर होनी चाहिए। – Sempiterna

+0

मुझे लगता है कि आपको 'खाली रेखा' से क्या मतलब है परिभाषित करने की आवश्यकता है। प्रश्न में आप जो वर्णन करते हैं वह खाली रेखा नहीं है। –

उत्तर

6

के बजाय ऐसे:

\n(\s*\n){2,} 

साथ:

\n\n 
इस तरह

:

preg_replace('/\n(\s*\n){2,}/', "\n\n", $message); // Quotes are important here. 

आप एक खाली लाइन नहीं करना चाहते हैं, तो आप एक को {2,} बदल जाएगा + और एक \n का उपयोग करें। यह वास्तव में {2,} के बजाय + के साथ काम करेगा। {2,} एक अनुकूलन है।

+0

हां, यह ठीक वैसे ही काम करता है जैसा मैं चाहता था। आपको बहुत - बहुत धन्यवाद! :) – Sempiterna

+1

यह एक ठीक काम करता है!यदि आप खाली रेखा नहीं चाहते हैं, तो आप निम्न कोड का उपयोग करेंगे: 'preg_replace ('/\ n (\ s * \ n) +/', "\ n", $ आउटपुट); ' – Devner

4

पर एक त्वरित उदाहरण बनाया निम्नलिखित का प्रयास करें:

preg_replace('/\n(\s*\n)+/', "\n\n", $message); 

यह एक नई पंक्ति में एक भी नई पंक्ति के साथ रिक्त लाइनों के किसी भी संख्या के बाद की जगह लेगा।

+0

पर एक त्वरित उदाहरण जोड़ा है जो काम नहीं करता है। यह किसी भी तरह से एक खाली स्ट्रिंग छोड़कर, सभी सामग्री को हटा देता है। – Sempiterna

+0

''\ n'' एक नई लाइन नहीं है। –

+0

@ केंडलफ्रे - धन्यवाद, मूल रूप से ओपी 'लाइन \ nline2' के लिए पूछ रहा था, लेकिन ऐसा लगता है कि आप jsfiddle के आधार पर इसे सही तरीके से व्याख्या कर रहे थे। –

0

अपने jsFiddle आधार पर, इस प्रयास करें:

$result = preg_replace('/\n(\n*\s)+/', "\n\n", $message); 
+0

आपका दूसरा कोड लगभग काम करता है । यह सभी खाली लाइनों को प्रतिस्थापित करता है और पाठ के प्रत्येक टुकड़े के बीच उन्हें खाली रेखा के साथ बदल देता है। लेकिन यह पाठ के प्रत्येक टुकड़े के बीच एक खाली रेखा भी जोड़ता है जिसमें एकाधिक खाली रेखाएं नहीं थीं। – Sempiterna

+0

क्या आप अपने प्रश्न और अपेक्षित परिणामों के विस्तृत विवरण के साथ अपना प्रश्न अपडेट कर सकते हैं? – sudoash

संबंधित मुद्दे