একাধিক সাদা স্থান সরিয়ে ফেলুন


208

আমি $row['message']একটি মাইএসকিউএল ডাটাবেস থেকে পেয়েছি এবং আমার মতো সমস্ত সাদা স্থান সরিয়ে ফেলতে হবে \n \t

$row['message'] = "This is   a Text \n and so on \t     Text text.";

এতে ফর্ম্যাট করা উচিত:

$row['message'] = 'This is a Text and so on Text text.';

আমি চেষ্টা করেছিলাম:

 $ro = preg_replace('/\s\s+/', ' ',$row['message']);
 echo $ro;

কিন্তু এটি মুছে যায় না \nবা \tশুধু একক স্পেস,। আমাকে কীভাবে কেউ বলতে পারেন?


1
নিউলাইন এবং ট্যাব অক্ষরগুলি একক উদ্ধৃতিতে রয়েছে, তাই আপনি কি তাদের আক্ষরিক চান?
চিহ্নিত লালর

আমি কোড সেকটিনের উদ্ধৃতিটিকে ডাবল-কোটে পরিবর্তন করে double n এবং to t দিয়ে স্থির করেছি।
বাটাল বাটকস

উত্তর:


394

তোমার দরকার:

$ro = preg_replace('/\s+/', ' ',$row['message']);

আপনি ব্যবহার করছেন \s\s+যার অর্থ শ্বেত স্পেস (স্পেস, ট্যাব বা নিউলাইন) এর পরে এক বা একাধিক সাদা স্থান। যার কার্যকরী অর্থ দুটি বা ততোধিক সাদা স্থানকে একটি একক স্থানের সাথে প্রতিস্থাপন করা।

আপনি যা চান তা হ'ল এক বা একাধিক সাদা স্থানকে একক সাদা স্থানের সাথে প্রতিস্থাপন করা, যাতে আপনি প্যাটার্নটি ব্যবহার করতে পারেন \s\s*বা \s+(প্রস্তাবিত)


1
তার পদ্ধতিটি এর চেয়ে ভাল: আপনি কেন একটি স্থানকে একটি স্থানের সাথে প্রতিস্থাপন করবেন?
নিকফ

16
তিনি চান \ n এবং \ t স্থানের সাথে প্রতিস্থাপন করা হোক। এখন তার ধরণগুলি এর সাথে মেলে না, say x = "এর জন্য" n এটি \ twork "বলুন; ওপি চায় যে সমস্ত সাদা জায়গা একক জায়গাতে প্রতিস্থাপন করা যায়।
২৪

@ কোডডিক্টিক্ট, কীভাবে আমরা \ n রাখতে এবং স্ট্রিং থেকে অন্য সমস্ত একাধিক স্থান এবং ট্যাবগুলি সরাতে পারি? দয়া করে আমাকে সহায়তা করুন
মনসুরখান চেরুপুজা

"\ S +" কেন সুপারিশ করা হয় আপনি আরও সুনির্দিষ্ট হতে পারেন?
আইসিয়াস

6
নোট করুন যে পিএইচপিতে \s"উল্লম্ব ট্যাব" অন্তর্ভুক্ত নয় chr(11)। এটিও অন্তর্ভুক্ত করার জন্য আপনাকে spaceঅক্ষর শ্রেণি ব্যবহার করতে হবে : [[:space:]]+ php.net/manual/en/regexp.references.character-classes.php
ইয়ারোস্লাভ

68
<?php
$str = "This is  a string       with
spaces, tabs and newlines present";

$stripped = preg_replace(array('/\s{2,}/', '/[\t\n]/'), ' ', $str);

echo $str;
echo "\n---\n";
echo "$stripped";
?>

এই ফলাফল

This is  a string   with
spaces, tabs and newlines present
---
This is a string with spaces, tabs and newlines present

3
আপনি একজন সত্য জীবনদাতা। আমি এই সম্পর্কে উইন্ডো যদি বাইরে লাফিয়ে যাব।
বাইকাইক 77

ঝরঝরে, এখনও সহায়ক
-19

16
preg_replace('/[\s]+/mu', ' ', $var);

\s ইতিমধ্যে ট্যাব এবং নতুন লাইন রয়েছে, সুতরাং এটি উপরের রেজেক্স পর্যাপ্ত বলে মনে হচ্ছে।


2
স্কয়ার বন্ধনী এখানে প্রয়োজন হয় না কারণ তাদের ভিতরে কেবল একটি জিনিস রয়েছে। /mসেখানে নেই অভ্যস্ত প্রভাব আছে ^বা $নোঙ্গর এবং /uএটা সামান্য মন্থর ব্যতীত নিচে ও মারা কোনো প্রভাব না যদি ইনপুট স্ট্রিং নয় বৈধ হল UTF-8 (এটা কি কোনো প্রভাব পড়ে না \sমিলে যায়, কিন্তু এটা প্রভাবিত করবে \pZ)।
থোমাসরুটটার

12

একটি ফাংশনে সরলীকৃত:

function removeWhiteSpace($text)
{
    $text = preg_replace('/[\t\n\r\0\x0B]/', '', $text);
    $text = preg_replace('/([\s])\1+/', ' ', $text);
    $text = trim($text);
    return $text;
}

ড্যানুয়েল ও'নেল উত্তরের উপর ভিত্তি করে।


7
$str='This is   a Text \n and so on Text text.';
print preg_replace("/[[:blank:]]+/"," ",$str);

2
এটিই আমার পক্ষে সবচেয়ে ভাল কাজ করেছে। এছাড়াও, আমি স্ট্রিংয়ের শুরু এবং
শেষেরভাগে

@ ডিজিয়ামিড আপনি এটি ট্রিম দিয়ে করতে পারেন (প্রিগ_রিজেক্ট (...))
ভার্গা

7

আমি এখানে সমস্যাটির প্রতিলিপি করতে পারি না:

$x = "this    \n \t\t \n    works.";
var_dump(preg_replace('/\s\s+/', ' ', $x));
// string(11) "this works."

আমি নিশ্চিত নই যে এটি কেবল প্রতিলিপি ত্রুটি ছিল বা না, তবে আপনার উদাহরণে আপনি একটি একক-উদ্ধৃত স্ট্রিং ব্যবহার করছেন। \nএবং \tশুধুমাত্র নতুন লাইন এবং ট্যাব রূপে গণ্য হয় আপনি একটি ডবল উদ্ধৃত পংক্তি পেয়েছেন। এটাই:

'\n\t' != "\n\t"

সম্পাদনা : কোডাডিক্টিক্ট যেমন উল্লেখ করেছেন, \s\s+একটি ট্যাব অক্ষর প্রতিস্থাপন করবে না। আমি এখনও ব্যবহার \s+করা একটি কার্যকর সমাধান হিসাবে মনে করি না , তবে এটি পরিবর্তে এটি সম্পর্কে কীভাবে:

preg_replace('/(?:\s\s+|\n|\t)/', ' ', $x);

2
+1, সত্য। প্রচুর একক স্পেস সহ স্ট্রিংয়ের জন্য (যা সাধারণত এটি হয়) কোনও স্থানকে স্থানের সাথে প্রতিস্থাপন করতে অক্ষম।
310

1
@ কোয়াডডিক্ট: আপনার হাইপোথিসিস পরীক্ষা করার জন্য, আমি প্রতিস্থাপনের 1000 টি দিয়ে চালানোর জন্য এবং প্রতিটিটির সময় পরীক্ষা করার জন্য একটি দ্রুত স্ক্রিপ্ট লিখেছিলাম wrote '+1 স্ট্রিংয়ের জন্য , সত্য। প্রচুর একক স্পেস সহ স্ট্রিংয়ের জন্য (যা সাধারণত এটি হয়) স্থানটি স্থানের সাথে প্রতিস্থাপন করতে অক্ষম fficient - ২৪ শে ফেব্রুয়ারি od '10 এ 13:32 'তে কোডডিক্টিক্ট , এক হাজার \ s + পূর্ববর্তী স্থান () কলগুলি 0.010547876358032 সেকেন্ড এবং এক হাজার (?: \ S \ s + | \ n | \ t) প্রিগ_রেপ্লেস () কলগুলি গ্রহণ করেছে 0.013049125671387, এটি প্রায় 30% ধীর।
জোসেফ গাল

আপনি এই শেষ উদাহরণটিতে "\ r" যুক্ত করতে চাইতে পারেন কারণ কিছু কম্পিউটার নিজেরাই (অ্যাপল ম্যাক?) একক "\ r" ব্যবহার করে
থোমাসর্টেটার

4
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']);

এটি সমস্ত ট্যাব, সমস্ত নিউলাইন এবং একাধিক স্পেসের সমস্ত সংমিশ্রণ, ট্যাব এবং একটি লাইনের সাথে নতুন লাইনের প্রতিস্থাপন করে।


4
<?php
#This should help some newbies
# REGEX NOTES FROM DANUEL
# I wrote these functions for my own php framework
# Feel Free to make it better
# If it gets more complicated than this. You need to do more software engineering/logic.
# (.)  // capture any character
# \1   // if it is followed by itself
# +    // one or more

class whitespace{

    static function remove_doublewhitespace($s = null){
           return  $ret = preg_replace('/([\s])\1+/', ' ', $s);
    }

    static function remove_whitespace($s = null){
           return $ret = preg_replace('/[\s]+/', '', $s );
    }

    static function remove_whitespace_feed( $s = null){
           return $ret = preg_replace('/[\t\n\r\0\x0B]/', '', $s);
    }

    static function smart_clean($s = null){
           return $ret = trim( self::remove_doublewhitespace( self::remove_whitespace_feed($s) ) );
    }
}
$string = " Hey   yo, what's \t\n\tthe sc\r\nen\n\tario! \n";
echo whitespace::smart_clean($string);

স্ট্যাটিক ফাংশন অপসারণ_স্বাস্থ্য কি কারণে? আপনি সংজ্ঞায়িত করেছেন তবে কখনও এটি ব্যবহার করবেন না।
লুকাশ লিসিস

এগুলির প্রত্যেকেরই ব্যবহার রয়েছে তবে এগুলির কোনওটিই প্রশ্নটি যা অর্জন করে তা অর্জন করতে পারে না যা কেবলমাত্র একের সাথে একাধিক টানা সাদা স্থানকে প্রতিস্থাপন করবে। আপনার "অপসারণ_দ্বৈবক্ষেত্র স্পেস" কেবল একই সাদা বর্ণের একাধিক অক্ষরের প্রতিস্থাপন করবে, সুতরাং এটি "with n \ n" n "কে '' এর সাথে প্রতিস্থাপন করবে, তবে এটি" \ r \ n "
থোমস্রুটটার

4

প্রাক-স্থান ছাড়া ()

$str = "This is   a Text \n and so on \t     Text text.";
$str = str_replace(["\r", "\n", "\t"], " ", $str);
while (strpos($str, "  ") !== false)
{
    $str = str_replace("  ", " ", $str);
}
echo $str;

2

আমি এই কোড এবং প্যাটার্নটি ব্যবহার করি:

preg_replace('/\\s+/', ' ',$data)

$data = 'This is   a Text 
   and so on         Text text on multiple lines and with        whitespaces';
$data= preg_replace('/\\s+/', ' ',$data);
echo $data;

আপনি এটি http://writecodeonline.com/php/ এ পরীক্ষা করতে পারেন


এটি আমার সাথে মারিয়া ডিবিতেও এই প্রশ্নের সাথে কাজ করে: SELECT search_able, REGEXP_REPLACE (search_able,"\\s+",' ') FROM book where id =260 তাই আপনাকে অনেক ধন্যবাদ
জলমতারি

1

আপনার যা প্রয়োজন কেবল তা নীচে চালানো:

echo preg_replace('/\s{2,}/', ' ', "This is   a Text \n and so on \t     Text text."); // This is a Text and so on Text text.

1

এটি আমি ব্যবহার করব:

ক। ডাবল উদ্ধৃতি ব্যবহার করা নিশ্চিত করুন, উদাহরণস্বরূপ:

$row['message'] = "This is   a Text \n and so on \t     Text text.";

খ। অতিরিক্ত সাদা স্থান অপসারণ করতে, ব্যবহার করুন:

$ro = preg_replace('/\s+/', ' ', $row['message']); 
echo $ro;

এটি দ্রুততম সমাধান নাও হতে পারে তবে আমি মনে করি এটির জন্য কমপক্ষে কোডের প্রয়োজন হবে এবং এটি কাজ করা উচিত। যদিও আমি কখনও মাইএসকিএল ব্যবহার করি নি, তাই আমি ভুল হতে পারি।


1

সত্য হিসাবে, যদি আপনি মনে করেন যে আপনি এই জাতীয় কিছু চান:

preg_replace('/\n+|\t+|\s+/',' ',$string);

1

এটি একক ট্যাব সহ একাধিক ট্যাব প্রতিস্থাপন করবে

preg_replace("/\s{2,}/", "\t", $string);

-2

লুপের সাহায্যে প্রেগ_রিপ্লেস ছাড়াই।

<?php

$str = "This is   a Text \n and so on \t     Text text.";
$str_length = strlen($str);
$str_arr = str_split($str);
for ($i = 0; $i < $str_length; $i++) {
    if (isset($str_arr[$i + 1])
       && $str_arr[$i] == ' '
       && $str_arr[$i] == $str_arr[$i + 1]) {
       unset($str_arr[$i]);
    } 
    else {
      continue;
    }
}

 echo implode("", $str_arr) ; 

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