स्ट्रिंग से नई लाइनें निकालें और एक खाली जगह के साथ बदलें


291
$string = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

स्ट्रिंग से सभी नई लाइनें निकालना चाहते हैं।

मेरे पास यह रेगेक्स है, यह उन सभी को पकड़ सकता है, समस्या यह है कि मुझे पता नहीं है कि मुझे किस फ़ंक्शन के साथ इसका उपयोग करना चाहिए।

/\r\n|\r|\n/

$string बन जाना चाहिए:

$string = "put returns between paragraphs for linebreak add 2 spaces at end ";

1
यदि आप हजारों प्रतिस्थापन कर रहे हैं, तो उपयोग करने से बचें preg_replace। यह लगभग दोगुनी धीमी है str_replace
एलेक्स डब्ल्यू

s($str)->normalizeLineEndings('')जैसा कि इस स्टैंडअलोन लाइब्रेरी में पाया गया है, आप मददगार हो सकते हैं । यह न केवल एलएफ, सीआर और सीआरएलएफ, बल्कि किसी भी यूनिकोड की नई लाइन को हटा देगा।
कांव-कांव

जवाबों:


578

आपको डबल लाइन ब्रेक से सावधान रहना होगा, जिससे डबल स्पेस पैदा होगा। यह वास्तव में कुशल नियमित अभिव्यक्ति का उपयोग करें:

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

मल्टीपल स्पेस और न्यूलाइन्स को सिंगल स्पेस के साथ बदल दिया जाता है।

संपादित करें: जैसा कि दूसरों ने बताया है, इस समाधान में शब्दों के बीच एकल newlines मिलान के मुद्दे हैं। यह उदाहरण में मौजूद नहीं है, लेकिन कोई भी आसानी से देख सकता है कि यह स्थिति कैसे हो सकती है। एक विकल्प निम्नलिखित करना है:

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

10
इससे पहले कि आप इस समाधान का उपयोग करें, नीचे मेरा जवाब और मेरे जवाब के लिए टिप्पणियां देखें। यह समाधान आपकी अपेक्षा के अनुरूप काम नहीं कर सकता है।
मटसोलऑफ

1
नियमित अभिव्यक्ति "व्हॉट्सएप कैरेक्टर मैच" में, यह एक नई रेखा से क्यों मेल खाएगा?
माइकल जेड

2
मैं सभी व्हाट्सएप को हटाने / बदलने के लिए एक समाधान खोज रहा था, लेकिन (डबल) रिक्त स्थान नहीं। यह रेगेक्स है जिसने इसे किया:/(?![ ])\s+/
एलगोरैट जूल

बस यू को यह बताने की इच्छा थी कि आपके समाधान ने मुझे बहुत समय बचाया है।
पार्थप्रतीम नेग जूल

183

स्वीकृत उत्तर पर कुछ टिप्पणियां:

+"1 या अधिक" का अर्थ है। मुझे नहीं लगता कि आपको दोहराने की जरूरत है \s। मुझे लगता है कि आप बस लिख सकते हैं '/\s+/'

इसके अलावा, यदि आप स्ट्रिंग में पहले और आखिरी में व्हॉट्सएप हटाना चाहते हैं, तो जोड़ें trim

इन संशोधनों के साथ, कोड होगा:

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

आप सही हे; /\s\s+/में लाइनफीड से मिलान करने में विफल होगा foo\nbar
एलन मूर

79

महज प्रयोग करें preg_replace()

$string = preg_replace('~[\r\n]+~', '', $string);

आप str_replace()इस पर दूर जा सकते हैं , हालाँकि यह कोड साफ नहीं दिखता है:

$string = str_replace(array("\n", "\r"), '', $string);

इसे आइडोन पर लाइव देखें


1
ओपी "पैराग्राफ" और "फॉर" के बीच एक स्थान चाहता है। यदि आप केवल नए वर्णों को हटाते हैं, तो एक नहीं होगा।
डैनियल वांडर्सलुइस

कृपया इसे सही करें$string = preg_replace("~[\r\n]~", "",$string);
erikbwork

अन्यथा कहने के लिए और कुछ नहीं है। मुझे लगता है कि सबसे सरल जवाब है!
erikbwork

3
@ फिर मैं इसे "गलत" करूंगा। यह जैसा है ठीक काम करता है।
NullUserException

1
@ विनीत यह सिर्फ एक सीमांकक है जो रेगेक्स की शुरुआत और समाप्ति को दर्शाता है
NullUserException

21
$string = str_replace(array("\n", "\r"), ' ', $string);

3
PHP में एस्केप सीक्वेंस को डबल उद्धृत करने की आवश्यकता है।
डैनियल वांडर्सलुइस

यह ठीक वही नहीं करता है जो ओपी चाहता है, क्योंकि यह मायावी के उत्तर के समान है और यह \rपात्रों को नहीं हटा रहा है
NullUserException

@ नल: आप इस पर टिप्पणी करने के बजाय अपनी खुद की पोस्ट को अपडेट क्यों नहीं करते?
फ़ेब्रिक

@NullUser: इस तथ्य को छोड़कर यह '' के बजाय '' के साथ सब कुछ बदल देता है।
14

12

आपको अपनी गति के लिए str_replace का उपयोग करना चाहिए और एक सरणी के साथ दोहरे उद्धरण चिह्नों का उपयोग करना चाहिए

str_replace(array("\r\n","\r"),"",$string);

संसाधनों में कम, परिपूर्ण, tks।
CONvid19

1
मैं गलत हो सकता हूं लेकिन यह कोड यूनिक्स सिस्टम पर नई लाइन चार को नहीं हटाता है क्योंकि उन सिस्टमों पर नई लाइन सिर्फ \nऔर सिर्फ इसलिए नहीं है \r\nकि मुझे लगता है कि ओपी नई लाइनों के स्थान पर एक सिंगल स्पेस डालने के लिए कह रहा है
मार्को डेमायो

7

मुझे यकीन नहीं है कि यह पहले से ही प्रस्तुत जवाब के खिलाफ कोई मूल्य है, लेकिन मैं इसे अच्छी तरह से पोस्ट कर सकता हूं।

// Create an array with the values you want to replace
$searches = array("\r", "\n", "\r\n");

// Replace the line breaks with a space
$string = str_replace($searches, " ", $string);

// Replace multiple spaces with one
$output = preg_replace('!\s+!', ' ', $string);

6

PCRE regex रिप्लेसमेंट preg_replace का उपयोग करके किया जा सकता है: http://php.net/manual/en/function.preg-replace.php

$new_string = preg_replace("/\r\n|\r|\n/", ' ', $old_string);

एक स्थान के साथ नई पंक्ति या वापसी वर्ण प्रतिस्थापित करेगा। यदि आप उन्हें बदलना नहीं चाहते हैं, तो 2 तर्क को बदल दें ''


1
pregकार्यों PCRE, नहीं POSIX, रेगुलर एक्सप्रेशन का उपयोग। ऐसे eregकार्य हैं जो POSIX का उपयोग करते हैं, लेकिन वे अब पदावनत हो गए हैं।
डैनियल वांडर्सलुइस

5

इसे इस्तेमाल करो:

एक खाली स्ट्रिंग के साथ नई श्रृंखलाओं की जगह लें:

$string = preg_replace("/[\\n\\r]+/", "", $string);

या आप शायद सिंगल स्पेस के साथ नईलाइन्स को बदलना चाहते हैं:

$string = preg_replace("/[\\n\\r]+/", " ", $string);

कृपया अपना कोड ठीक से प्रारूपित करें। यह चार स्थानों द्वारा संबंधित लाइन को इंडेंट करके किया जाता है।
jwueller

2
इसलिए मैं एकल उद्धरणों का उपयोग करता हूं इसलिए मुझे उन पात्रों से बचने की आवश्यकता नहीं है। \\nभयानक लग रहा है। \\\\ एक बैकस्लैश मैच के लिए बस भयानक है।
NullUserException

5

एस्केप सीक्वेंस\R एक जेनेरिक न्यूलाइन से मेल खाता है

यह है, कुछ भी यूनिकोड द्वारा एक लाइनब्रेक अनुक्रम माना जाता है । इसमें \v( ऊर्ध्वाधर व्हाट्सएप ) द्वारा मिलान किए गए सभी वर्ण और बहु ​​चरित्र अनुक्रम शामिल हैं \x0D\x0A...

$string = preg_replace('/\R+/', " ", $string);

8-बिट गैर-यूटीएफ -8 मोड \Rमें निम्नलिखित के बराबर है: (?>\r\n|\n|\x0b|\f|\r|\x85)... pcre.org

Regex101 डेमो


एंटोन कृपया जाँच करें, अगर मेरा संपादन ठीक है! कुछ और जानकारी जोड़ी।
बबल बबल

4

पाठ में पंक्ति विराम को आमतौर पर इस प्रकार दर्शाया गया है:

\ r \ n - एक विंडोज़ कंप्यूटर पर

एक Apple कंप्यूटर पर \ r -

लिनक्स पर \ n -

//Removes all 3 types of line breaks

$string = str_replace("\r", "", $string);

$string = str_replace("\n", "", $string);

3

इसके बारे में क्या:

$string = trim( str_replace( PHP_EOL, ' ', $string ) );

यह एक बहुत मजबूत समाधान होना चाहिए क्योंकि \ n सभी प्रणालियों में सही ढंग से काम नहीं करता है अगर मैं गलत नहीं हूँ ...


यह \ r लेकिन सिर्फ \ n को बदलने के लिए प्रतीत नहीं होता है: ideone.com/28KPcb
T30

जैसा कि मैनुअल में बताया गया है PHP_EOL में वर्तमान प्लेटफ़ॉर्म के लिए सही 'एंड ऑफ़ लाइन' प्रतीक है। यदि आप अन्य प्लेटफार्मों से तार आयात कर रहे हैं या आपके पास बस खराब स्वरूपित तार हैं तो यह टूट सकता है।
जीडीवाई

यदि आपके पास एक बहुत ही बंद वातावरण है, तो यह मेरे लिए सबसे सुरुचिपूर्ण समाधान की तरह लगता है क्योंकि इसका प्लेटफ़ॉर्म स्वतंत्र और शायद बहुत अच्छा प्रदर्शन है ... यदि आपके पास आयात / निर्यात परिदृश्यों की तरह अधिक व्यापक इनपुट है, तो शायद आपको एक रेगेक्स समाधान का उपयोग करना चाहिए।
जीडीवाई

3

मुझे यह देखकर आश्चर्य हुआ कि रेगेक्स के बारे में सभी को कितना कम पता है।

Php में स्ट्रिप न्यूलाइन्स है

$str = preg_replace('/\r?\n$/', ' ', $str);

पेरल में

$str =~ s/\r?\n$/ /g;

अर्थ पंक्ति के अंत में (दक्षता के लिए) - स्थान के साथ वैकल्पिक रूप से एक गाड़ी वापसी से पहले किसी भी नए वर्ण को बदलें।

\ n या \ 015 न्यूलाइन है। \ r या \ 012 कैरिज रिटर्न है। ? in regex का अर्थ है पिछले वर्ण का 1 या शून्य से मिलान। रेगेक्स में $ का मतलब लाइन के मैच एंड से है।

मूल और सबसे अच्छा regex संदर्भ perldoc perlre है, प्रत्येक कोडर को इस doc को अच्छी तरह से जानना चाहिए: http://perldoc.perl.org/perlre.html ध्यान दें कि सभी सुविधाएँ सभी भाषाओं द्वारा समर्थित नहीं हैं।


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

2

यह वह पैटर्न है जिसका मैं उपयोग करूंगा

$string = preg_replace('@[\s]{2,}@',' ',$string);

2

शायद यह काम करता है:

$str='\n';
echo str_replace('\n','',$str);

1

यह एक टैब भी निकालता है

$string = preg_replace('~[\r\n\t]+~', '', $text);

1

आप नीचे दिए गए कोड की कोशिश कर सकते हैं कि आपके पाठ में कोई भी श्वेत-स्थान और नई लाइनें संरक्षित रहेंगी।

$str = "
put returns between paragraphs

for linebreak add 2 spaces at end

";

echo preg_replace( "/\r|\n/", "", $str );


0

यह नीचे दिए गए कोड काम सभी पाठ कृपया इसका उपयोग करें:

$des = str_replace('\n',' ',$des);
$des = str_replace('\r',' ',$des);

0

आप नई लाइन और कई व्हाइट स्पेस निकाल सकते हैं।

$pattern = '~[\r\n\s?]+~';
$name="test1 /
                     test1";
$name = preg_replace( $pattern, "$1 $2",$name);

echo $name;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.