স্ট্রিং থেকে নতুন লাইনগুলি সরান এবং একটি খালি স্থান দিয়ে প্রতিস্থাপন করুন


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));

একাধিক স্পেস এবং নিউলাইনগুলি একক স্থানের সাথে প্রতিস্থাপন করা হয়েছে।

সম্পাদনা করুন: অন্যরা যেমন উল্লেখ করেছে, এই সমাধানটিতে শব্দের মধ্যে একক নতুন লাইনের সাথে মিল থাকা সমস্যা রয়েছে। এটি উদাহরণে উপস্থিত নেই, তবে যে কেউ কীভাবে সেই পরিস্থিতিটি ঘটতে পারে তা সহজেই দেখতে পাবেন। একটি বিকল্প নিম্নলিখিতটি করা হয়:

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

10
আপনি এই সমাধানটি ব্যবহার করার আগে নীচে আমার উত্তর এবং আমার উত্তর সম্পর্কে মন্তব্যগুলি দেখুন। আপনার সমাধান হিসাবে এই সমাধানটি কাজ করতে পারে না।
ম্যাটসোলফ

1
নিয়মিত প্রকাশে "\ s একটি সাদা স্থানের চরিত্রের সাথে মেলে", কেন এটি একটি নতুন লাইনের সাথে মিলবে?
মাইকেল জেড

2
আমি সমস্ত হোয়াইটস্পেসগুলি সরানোর / প্রতিস্থাপন করার জন্য একটি সমাধান খুঁজছিলাম কিন্তু (ডাবল) স্পেস নয়। এটিই হ'ল রেজেক্স এটি:/(?![ ])\s+/
31:55

কেবল আপনাকে জানাতে চেয়েছিলাম যে আপনার সমাধানটি আমার অনেক সময় সাশ্রয় করেছে।
পার্থপ্রতিম নিওগ

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);
এটিকে

নাহলে আর কিছু বলার নেই। এটাই সবচেয়ে সহজ উত্তর, আমার মনে হয়!
এরিকবওয়ার্ক

3
@ এরিক তারপর আমি এটি "ভুল" করব " এটি যেমন ঠিক তেমন কাজ করে।
নাল ইউজারএক্সেপশন

1
@ ভিনিট এটি কেবলমাত্র রেইগেক্সের শুরু এবং শেষের একটি ডিলিমিটার হিসাবে চিহ্নিত করছে
নাল ইউজার এক্সসেপশন

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

3
পিএইচপি-তে এস্কেপ সিকোয়েন্সগুলি ডাবল কোট করা দরকার।
ড্যানিয়েল ভ্যান্ডারসলুইস

এটি ওপি যা চায় তা ঠিক তেমন করে না, যেহেতু এটি অধরা জবাবের সমান এবং এটি \rচরিত্রগুলি সরিয়ে
ফেলছে

@ নাল ইউজার: আপনি এ বিষয়ে মন্তব্য না করে নিজের পোস্টটি আপডেট করবেন না কেন?
ফেব্রিক

@ নাল ইউজার: এটি '' এর পরিবর্তে '' এর পরিবর্তে সবকিছুকে প্রতিস্থাপন করে।
ফেব্রিক

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

পিসিআরই রিজেক্স রিপ্লেসমেন্টগুলি প্রাক-রেজিপ্লেস ব্যবহার করে করা যেতে পারে: http://php.net/manual/en/function.preg-replace.php

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

নতুন লাইন প্রতিস্থাপন বা একটি স্থান সঙ্গে অক্ষর ফেরত হবে। আপনি যদি এগুলি প্রতিস্থাপন করতে কিছু না চান তবে ২ য় আর্গুমেন্ট এ পরিবর্তন করুন ''


1
pregফাংশন PCRE না POSIX, নিয়মিত এক্সপ্রেশন ব্যবহার করুন। eregPOSIX ব্যবহার করে এমন ফাংশন রয়েছে তবে সেগুলি এখন অবমূল্যায়ন করা হয়েছে।
ড্যানিয়েল ভ্যান্ডারসলুইস

5

এটা ব্যবহার কর:

একটি খালি স্ট্রিং সহ নতুন লাইনের সিরিজ প্রতিস্থাপন করুন:

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

অথবা আপনি সম্ভবত একটি একক স্থানের সাথে নিউলাইনগুলি প্রতিস্থাপন করতে চান:

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

আপনার কোডটি সঠিকভাবে ফর্ম্যাট করুন। এটি চারটি স্পেস দ্বারা প্রাসঙ্গিক লাইন যুক্ত করে সম্পন্ন করা হয়।
jwueller

2
সে কারণেই আমি একক উদ্ধৃতি ব্যবহার করি তাই আমাকে এই অক্ষরগুলি থেকে বাঁচার দরকার নেই। \\nভয়ানক দেখাচ্ছে। \\\\ একটি একক ব্যাকস্ল্যাশ মেলানো ঠিক ভয়ঙ্কর।
নাল ইউজারএক্সেপশন

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 - একটি উইন্ডোজ কম্পিউটারে

- 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 ) );

এটি একটি দুর্দান্ত দৃ solution় সমাধান হওয়া উচিত কারণ wrong n আমি ভুল না হলে সমস্ত সিস্টেমে সঠিকভাবে কাজ করে না ...


এটি আর replace আর প্রতিস্থাপন করবে বলে মনে হচ্ছে না কেবল \ n: আদর্শ one.com/28KPcb
T30

PHP_EOL ম্যানুয়ালটিতে উল্লিখিত হিসাবে বর্তমান প্ল্যাটফর্মের জন্য সঠিক 'শেষের লাইনের' চিহ্ন রয়েছে symbol আপনি যদি অন্য প্ল্যাটফর্মগুলি থেকে স্ট্রিং আমদানি করেন বা আপনার কেবল খারাপ ফর্ম্যাটেড স্ট্রিং রয়েছে এটি ভেঙে যেতে পারে।
জিডিওয়াই

আপনার যদি সুন্দর বন্ধ পরিবেশ থাকে তবে এটি আমার কাছে সবচেয়ে মার্জিত সমাধান বলে মনে হচ্ছে কারণ এটির প্ল্যাটফর্মটি স্বাধীন এবং সম্ভবত বেশ পারফরম্যান্ট… আপনার যদি আমদানি / রফতানির মতো দৃশ্যের মতো আরও বিস্তৃত ইনপুট থাকে তবে আপনার সম্ভবত একটি রেজেক্স সমাধান ব্যবহার করা উচিত।
জিডিওয়াই

3

রেজেক্স সম্পর্কে সকলেই কীভাবে কম জানেন তা অবাক হয়ে আমি অবাক হয়েছি।

স্ট্রিপ পিএইচপি এ নিউলাইনস হয়

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

পার্ল ইন

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

অর্থ লাইনের শেষে যে কোনও নিউলাইন অক্ষরকে প্রতিস্থাপন করুন (দক্ষতার জন্য) - allyচ্ছিকভাবে গাড়ীর ফেরার আগে - একটি স্থান দিয়ে।

\ n বা 5 015 নিউলাইন। \ r বা 12 012 হল ক্যারিজ রিটার্ন। ? রেজেক্স মানে পূর্ববর্তী অক্ষরের 1 বা শূন্যের মিল। ge ইন রেজেক্স মানে লাইনের সমাপ্তি।

আসল এবং সেরা রেজেক্স রেফারেন্সটি হল পেরডোক পার্লের, প্রতিটি কোডার এই দস্তাবেজটি বেশ ভালভাবে জেনে থাকতে হবে: http://perldoc.perl.org/perlre.html নোটটি সমস্ত বৈশিষ্ট্য সমস্ত ভাষা দ্বারা সমর্থিত নয়।


এই সমাধানটি আমার পক্ষে কার্যকর হয়নি তবে যেমনটি বলা হয়েছে, আসল সমাধানটি উত্পাদন করতে আমার আরও পড়তে হবে। আমি অবাক হয়েছি এটি কার্যকর হয়নি।
অ্যাডাম


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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.