শব্দটি কেবল তার নিজস্ব লাইনে থাকলে সরান


16

আমি এই আছে:

$text = '
   hello world
    
    hello
';

এটি   কেবল নিজের লাইনে থাকলে কীভাবে আমি সরিয়ে ফেলব ? উপরের উদাহরণস্বরূপ, দ্বিতীয়টি  সরানো উচিত। ফলাফলগুলি হওয়া উচিত:

$text = '
   hello world

    hello
';

আমি এখন পর্যন্ত কি চেষ্টা করেছি

ভায়া str_replace(), আমি পারি:

$text = str_replace(' ', '', $text);

তবে এটি সমস্ত ক্ষেত্রেই সরিয়ে ফেলবে  , কেবল যখন এটি নিজের লাইনে থাকবে না।


6
আমি এ পর্যন্ত যা চেষ্টা করেছি তার সুন্দর সংযোজন - এই সাইটে মানক হওয়া উচিত। +1
গ্যারি উডস

2
@ উপদেষ্টা আপনার পদ্ধতির সাথে একটি উত্তর পোস্ট করতে নির্দ্বিধায় দয়া করে।
হেনরিক পিটারসন

1
@ ওফিরবারুচ আমি চেষ্টা করেছিলাম $text = str_replace('\n'.' '.'\n', '', $text);কিন্তু কার্যকর হয়নি। দেখুন
হেনরিক পিটারসন

3
@ ফ্ল্যাশথান্ডার str_replace()আমার অভিজ্ঞতার বিচার না করে আপনি কেন উত্তর পোস্ট করবেন না ? =)
হেনরিক পিটারসন

2
@ মিউসারুদ তবে এটি যদি আপনাকে মনে করেন যে এটি কোনও সাইট-ব্যাপী সমস্যা বলে মনে হয় তবে আপনার কাছে সম্প্রদায়ের সাথে মেটাতে আলোচনা করা দরকার। তুমি এখানে কেন চাপ দিচ্ছ?
হেনরিক পিটারসন

উত্তর:


10

আমি ইতিমধ্যে এই পদ্ধতির চেষ্টা করেছি এবং আপনি চান আউটপুট আমি পেতে

// Your initial text
$text = '
   hello world
    
    hello
';

// Explode the text on each new line and get an array with all lines of the text
$lines = explode("\n", $text);

// Iterrate over all the available lines
foreach($lines as $idx => $line) {
    // Here you are free to do any if statement you want, that helps to filter
    // your text.

    // Make sure that the text doesn't have any spaces before or after and 
    // check if the text in the given line is exactly the same is the  
    if ( ' ' === trim($line) ) {
        // If the text in the given line is   then replace this line 
        // with and emty character
        $lines[$idx] = str_replace(' ', '', $lines[$idx]);
    }
}

// Finally implode all the lines in a new text seperated by new lines.
echo implode("\n", $lines);

আমার লোকাল এ আমার ফলাফল:


hello world

 hello

এটি হোয়াইটস্পেসগুলিও সরিয়ে ফেলবে, এবং লেখক কেবল সরাতে চেয়েছিলেন 
ফ্ল্যাশ থান্ডার

@ ফ্ল্যাশ থান্ডার আউটপুট হিসাবে আমার যা আছে তা আউটপুটটির সাথে সম্পূর্ণভাবে একত্রিত হয়ে প্রশ্ন দ্বারা অনুরোধ করা হয়েছে। আপনি যদি পরীক্ষা করেন যে আমার আউটপুটটি ইনিটাল প্রয়োজনীয়তার সাথে সমান :) আপনি কি পিএইচপি 7 তে আমার কোড চালানোর চেষ্টা করেছিলেন? আপনি অন্য কোন আউটপুট পেয়েছেন?
মেরিয়ানোস নিকোস

আমি বলব যে লেখক এমনকি সচেতন নন যে সেখানে কোনও ট্যাব / কয়েকটি ফাঁকা জায়গা রয়েছে, কারণ তিনি তার পরে স্থানটির জন্য অন্য মন্তব্যে জিজ্ঞাসা করেছিলেন (এবং এতে এটি নেই)।
ফ্ল্যাশ থান্ডার

@ ফ্ল্যাশথান্ডার আমি কেবল একটি মামলার উদাহরণ চাইছিলাম।
হেনরিক পিটারসন

1
ওহ দুঃখিত, একটি মিসক্লিক হতে হয়েছিল
ফ্ল্যাশ থান্ডার

2

আমার পদ্ধতির হবে:

  1. নতুন লাইনে পাঠ্য বিস্ফোরণ করুন
  2. অ্যারেতে প্রতিটি মান ছাঁটাই
  3. মান সহ প্রতিটি অ্যারে আইটেম খালি করুন  
  4. নতুন লাইনের সাথে ইমপ্লোড

নিম্নলিখিত কোডে ফলাফল:

$chunks = explode(PHP_EOL, $text);
$chunks = array_map('trim', $chunks);
foreach (array_keys($chunks, ' ') as $key) {
    $chunks[$key] = '';
}
$text = implode(PHP_EOL, $chunks);

2
আপনার কোড আউটপুট কি জিজ্ঞাসা করা হয় অভিন্ন নয়: / `` হ্যালো করুন & nbsp; বিশ্বের করুন & nbsp; হ্যালো `` প্রাথমিক প্রয়োজন শুধুমাত্র প্রতিস্থাপন করতে হয়  দূরবর্তী পুরো লাইন ছাড়া, খালি পাঠ্য সহ: /। এছাড়াও, মনে রাখবেন যে আমি আপনার উত্তরটিকে কমিয়ে দিচ্ছি না :) আমার মন্তব্যটি কেবল একটি বন্ধুত্বপূর্ণ বার্তা ছিল :)
মেরিয়ানোস নিকোস

1
ঠিক আছে, আমি এটি সংশোধন করতে আমার উত্তর আপডেট করেছি
জানু

1
উপায় এখন অনেক ভাল :)
মেরিয়ানোস নিকোস

2

এরকম কিছু হতে পারে:

$text = preg_replace("~(^[\s]?|[\n\r][\s]?)( )([\s]?[\n\r|$])~s","$1$3",$text);

http://sandbox.onlinephpfunctions.com/code/f4192b95e0e41833b09598b6ec1258dca93c7f06

(এটি পিএইচপি 5 এ কাজ করে তবে কোনওভাবে পিএইচপি 7 এর কিছু সংস্করণে কাজ করে না )


বিকল্পটি হ'ল:

<?php
    $lines = explode("\n",$text);
    foreach($lines as $n => $l)
        if(trim($l) == '&nbsp;')
            $lines[$n] = str_replace('&nbsp;','',$l);
    $text = implode("\n",$lines);
?>

1
আমি এটি পরীক্ষা করি এবং কাজ করে না :)। এছাড়াও মনে রাখবেন আমি আপনাকে কোনও ডাউনটাও দিলাম না। এটি কেবল একটি বন্ধুত্বপূর্ণ মন্তব্য :) আপনার সমাধানটি পরীক্ষার পরে আউটপুট অপরিবর্তিত রয়েছে।
মেরিয়ানোস নিকোস


1
আমি আপনার কোডটি চালানোর সময় আমি আমার
লোকালটিতে

2
@ মেরিয়ানসনিকোস ওহ মজার, পিএইচপি 5 তে কাজ করে তবে পিএইচপি 7 তে কাজ করে না।
ফ্ল্যাশ থান্ডার

হয়তো আপনিই ঠিক. আমি এটি পিএইচপি 7 এ
চালাচ্ছি

1

আপনি যদি নিজের লাইন চরগুলির শেষ জানেন এবং &nbsp;সর্বদা একটি নতুন লাইন অনুসরণ করেন:

<?php
$text = '
   hello&nbsp;world
   &nbsp;
   &nbsp;hello
';


print str_replace("&nbsp;\n", "\n", $text);

আউটপুট (এখানে ফর্ম্যাটিংয়ে কিছু অন্তর্নিহিত সাদা জায়গা হারিয়ে গেছে):

   hello&nbsp;world

   &nbsp;hello

ক্যাভেট: পূর্ববর্তী লিখিত &nbsp;সামগ্রীর সাথে শেষ হওয়া যে কোনও লাইনও প্রভাবিত হবে, সুতরাং এটি আপনার প্রয়োজনগুলি পূরণ করতে পারে না।


1
এটি আসলে একটি খুব দৃ solution় সমাধান আমরা যদি সাথে থাকি str_replace()!
হেনরিক পিটারসন

তাই কি? আমি আরও কেস দেখতে পাচ্ছি যখন এটি কাজ করবে না
ফ্ল্যাশ থান্ডার

@ প্রোগ্রোক কীভাবে এটিকে এমনভাবে সামঞ্জস্য করা সম্ভব যেখানে স্থানগুলির পরে এটি গণনা করে &nbsp;? উদাহরণস্বরূপ:"&nbsp; \n"
হেনরিক পিটারসন

@ হেনরিকপিটারসন নং
ফ্ল্যাশ থান্ডার

1

আপনি এর জন্য নিয়মিত অভিব্যক্তি ব্যবহার করে ডটল এবং মাল্টলাইনলাইনের সংশোধনকারীগুলিকে একসাথে বর্ণনামূলক আশ্বাস সহ ব্যবহার করতে পারেন:

preg_replace("~(?sm)(?<=\n)\s*&nbsp;(?=\n)~", '',$text);
  • (?sm): ডটল (গুলি) মাল্টলাইন (মি)
  • (?<=\n): নতুন লাইনের পূর্বে (ম্যাচের অংশ নয়)
  • \s*&nbsp;\s*: একক & nbsp; surroundingচ্ছিক আশেপাশের সাদা স্থানের সাথে
  • (?=\n): ট্রেলিং নিউলাইন (ম্যাচের অংশ নয়)
>>> $text = '                                                                                               
 hello&nbsp;world                                                                                         
 &nbsp;                                                                                                   
 &nbsp;hello                                                                                           
 ';
=> """
   \n
      hello&nbsp;world\n
      &nbsp;\n
      &nbsp;hello\n
   """
>>> preg_replace("~(?sm)(?<=\n)\s*&nbsp;\s*(?=\n)~", '',$text);
=> """
   \n
      hello&nbsp;world\n
   \n
      &nbsp;hello\n
   """
>>>

0

আপনি লাইনগুলিতে বিভক্ত হয়ে তারপরে &nbsp;খালি স্ট্রিংয়ের পরিবর্তে লাইনে ফাঁকা স্ট্রিং রাখতে পারেন যা কেবলমাত্র &nbsp;এবং একটি সাদা স্থান রয়েছে contain

আমরা আসল লাইনটি শেষ করে রাখব, সেগুলি ক্যাপচার করে।

<?php

$text = '
   hello&nbsp;world
   &nbsp;
   &nbsp;hello
';
$lines = preg_split('@(\R)@', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach($lines as &$v)
    if (trim($v) === '&nbsp;')
        $v = str_replace('&nbsp;', '', $v);

$result = implode($lines);
var_dump($result);

আউটপুট:

string(40) "
   hello&nbsp;world

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