পিএইচপি-তে দুটি স্ট্রিংয়ের মধ্যে কীভাবে সাবস্ট্রিং পাবেন?


142

আমার একটি ফাংশন দরকার যা দুটি শব্দের (বা দুটি অক্ষরের) মধ্যে বিস্তৃত ফেরত দেয়। আমি ভাবছি যে কোনও পিএইচপি ফাংশন রয়েছে যা তা অর্জন করে। আমি রেজেক্স সম্পর্কে ভাবতে চাই না (ভাল, আমি একটি করতে পারি তবে সত্যিই এটি যাওয়ার সর্বোত্তম উপায় মনে করি না)। চিন্তাভাবনা strposএবং substrফাংশন। এখানে একটি উদাহরণ:

$string = "foo I wanna a cake foo";

আমরা ফাংশনটিকে কল করি: $substring = getInnerSubstring($string,"foo");
এটি ফিরে আসে: "আমি একটি কেক চাই"।

আগাম ধন্যবাদ.

আপডেট: ভাল, এখন অবধি, আমি কেবল একটি স্ট্রিংয়ে কেবল মাত্র দুটি স্ট্রিং বেন্টিন পেতে পারি, আপনি কি আমাকে কিছুটা দূরে যেতে দেবেন এবং জিজ্ঞাসা করুন যে আমি getInnerSubstring($str,$delim)ডিলিম মানের মধ্যে যে কোনও স্ট্রিং পেতে ব্যবহার বাড়িয়ে দিতে পারি , উদাহরণ:

$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero  foo";

আমি একটি অ্যারে পেতে {"I like php", "I also like asp", "I feel hero"}


2
আপনি যদি ইতিমধ্যে লারাভেল ব্যবহার করেন \Illuminate\Support\Str::between('This is my name', 'This', 'name');তবে সুবিধাজনক। laravel.com/docs/7.x/helpers#method-str-between
রায়ান

উত্তর:


324

যদি স্ট্রিংগুলি আলাদা হয় (যেমন: [foo] এবং [/ foo]), জাস্টিন কুকের এই পোস্টটি একবার দেখুন । আমি নীচে তার কোড অনুলিপি:

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}

$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');

echo $parsed; // (result = dog)

7
এই ফানকটি শুরু এবং শেষ সহ অন্তর্ভুক্ত হতে সংশোধিত হয়েছে। <কোড> ফাংশন স্ট্রিং_দ্বয়ের মধ্যে ($ স্ট্রিং, $ স্টার্ট, $ শেষ, $ অন্তর্ভুক্ত = মিথ্যা) {$ স্ট্রিং = "" $ স্ট্রিং; $ ini = স্ট্রপোস ($ স্ট্রিং, $ স্টার্ট); যদি ($ ini == 0) "" ফিরে আসে; যদি (! $ অন্তর্ভুক্ত) $ ini + = স্ট্র্লেন ($ শুরু); $ লেন = স্ট্রপোস ($ স্ট্রিং, $ প্রান্ত, $ ini) - $ ini; যদি ($ অন্তর্ভুক্ত) $ লেন + = স্ট্রেন ($ শেষ); রিটার্ন সাবস্ট্রার ($ স্ট্রিং, $ ইনি, $ লেন); } </code>
হেনরি

2
এই ফাংশনটি বাড়ানো কি সম্ভব যাতে এটি দুটি স্ট্রিং ফিরিয়ে দিতে পারে? ধরা যাক আমার কাছে একটি [[ফুলস্ট্রিং "[[ট্যাগ] কুকুর [/ ট্যাগ] এবং [ট্যাগ] বিড়াল [/ ট্যাগ]" আছে এবং আমি একটি অ্যারে পিছনে চাই যাতে "কুকুর" এবং "বিড়াল" রয়েছে)।
লিওনার্ড শোয়েজ

1
@ লিওনার্ডস্চুয়েজ - এই উত্তরটি চেষ্টা করে দেখুন ।
লেম্যানমান্স

"[ট্যাগ] কুকুর [/ ট্যাগ] এবং [ট্যাগ] বিড়ালদের [/ ট্যাগ]" এখনও উত্তর দেওয়া হয়নি। অ্যারে আকারে "কুকুর" এবং "বিড়াল" কীভাবে পাবেন? আপনার পরামর্শ দিন.
রোমনিক সুসা

1
কেউ আমার প্রশ্নের জবাব দিলেন! আপনি এই স্ট্যাকওভারফ্লো
প্রশ্নগুলি

78

নিয়মিত ভাব প্রকাশের উপায়:

$str = 'before-str-after';
if (preg_match('/before-(.*?)-after/', $str, $match) == 1) {
    echo $match[1];
}

onlinePhp


1
এটি নিখুঁত ছিল। ধন্যবাদ!
কাইল কে

এটি দুর্দান্ত কাজ করে! এবং লোকেদের রেজিএক্স করতে ব্যবহার করা হয়নি, বিশেষ অক্ষরগুলি থেকে বাঁচতে কেবল "\" যুক্ত করুন: স্যান্ডবক্স.অনলাইনপ্পফিউশনস্
কোড

22
function getBetween($string, $start = "", $end = ""){
    if (strpos($string, $start)) { // required if $start not exist in $string
        $startCharCount = strpos($string, $start) + strlen($start);
        $firstSubStr = substr($string, $startCharCount, strlen($string));
        $endCharCount = strpos($firstSubStr, $end);
        if ($endCharCount == 0) {
            $endCharCount = strlen($firstSubStr);
        }
        return substr($firstSubStr, 0, $endCharCount);
    } else {
        return '';
    }
}

নমুনা ব্যবহার:

echo getBetween("abc","a","c"); // returns: 'b'

echo getBetween("hello","h","o"); // returns: 'ell'

echo getBetween("World","a","r"); // returns: ''

5
বিটিডাব্লু, আপনার "নমুনা ব্যবহার" অনুচ্ছেদটি ভুল। যুক্তিগুলি সম্পূর্ণ ভুল ক্রমে in
সেই-বেন

15
function getInnerSubstring($string,$delim){
    // "foo a foo" becomes: array(""," a ","")
    $string = explode($delim, $string, 3); // also, we only need 2 items at most
    // we check whether the 2nd is set and return it, otherwise we return an empty string
    return isset($string[1]) ? $string[1] : '';
}

ব্যবহারের উদাহরণ:

var_dump(getInnerSubstring('foo Hello world foo','foo'));
// prints: string(13) " Hello world "

আপনি যদি আশেপাশের সাদা স্থান সরাতে চান তবে ব্যবহার করুন trim। উদাহরণ:

var_dump(trim(getInnerSubstring('foo Hello world foo','foo')));
// prints: string(11) "Hello world"

1
এটি ঝরঝরে কারণ এটি ওয়ান-লাইনার তবে দুর্ভাগ্যক্রমে এটি একটি অনন্য ডিলিমিটার থাকার মধ্যেই সীমাবদ্ধ ie
মাস্তাজি

13
function getInbetweenStrings($start, $end, $str){
    $matches = array();
    $regex = "/$start([a-zA-Z0-9_]*)$end/";
    preg_match_all($regex, $str, $matches);
    return $matches[1];
}

পরীক্ষার জন্য আপনি নিম্নলিখিত উদাহরণে @@ এর মধ্যে স্ট্রিং (কী) এর অ্যারে চান যেখানে '/' এর মধ্যে পড়ে না

$str = "C://@@ad_custom_attr1@@/@@upn@@/@@samaccountname@@";
$str_arr = getInbetweenStrings('@@', '@@', $str);

print_r($str_arr);

3
"" / "এর মতো" / "যেমন" স্টার্ট বা $ শেষ ভেরিয়েবল হয় তখন অব্যাহতি রাখতে ভুলবেন না।
Luboš Remplík

10

strstr পিএইচপি ফাংশন দুটি ব্যবহার করুন।

$value = "This is a great day to be alive";
$value = strstr($value, "is"); //gets all text from needle on
$value = strstr($value, "be", true); //gets all text before needle
echo $value;

আউটপুট: "is a great day to"


8

আমি নিয়মিত অভিব্যক্তি সমাধানগুলি পছন্দ করি তবে অন্যগুলির কোনওটিই আমার পক্ষে উপযুক্ত নয়।

আপনি যদি জানেন যে কেবলমাত্র 1 টি ফলাফল রয়েছে তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

$between = preg_replace('/(.*)BEFORE(.*)AFTER(.*)/sm', '\2', $string);

পছন্দসই ডিলিমিটারগুলির আগে এবং তারপরে পরিবর্তন করুন।

এছাড়াও মনে রাখবেন কোনও কিছুই না মিলে ফাংশনটি পুরো স্ট্রিংটি ফিরিয়ে দেবে।

এই সমাধানটি মাল্টলাইন তবে আপনি আপনার প্রয়োজনের উপর নির্ভর করে সংশোধকগুলির সাথে খেলতে পারেন।


7

পিএইচপি প্রো নয়। তবে আমি সম্প্রতি এই প্রাচীরের মধ্যেও ছুটে এসেছি এবং এটিই আমি সামনে এসেছি।

function tag_contents($string, $tag_open, $tag_close){
   foreach (explode($tag_open, $string) as $key => $value) {
       if(strpos($value, $tag_close) !== FALSE){
            $result[] = substr($value, 0, strpos($value, $tag_close));;
       }
   }
   return $result;
}

$string = "i love cute animals, like [animal]cat[/animal],
           [animal]dog[/animal] and [animal]panda[/animal]!!!";

echo "<pre>";
print_r(tag_contents($string , "[animal]" , "[/animal]"));
echo "</pre>";

//result
Array
(
    [0] => cat
    [1] => dog
    [2] => panda
)

6

যদি আপনি fooএকটি সীমানা হিসাবে ব্যবহার করে থাকেন তবে দেখুনexplode()


হ্যাঁ আমরা বিস্ফোরিত অ্যারের 1 ম সূচক ব্যবহার করে প্রয়োজনীয় ফলাফল পেতে পারি। (জিরো নয়)
অধিনায়ক_এ

6
<?php
  function getBetween($content,$start,$end){
    $r = explode($start, $content);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
  }
?>

উদাহরণ:

<?php 
  $content = "Try to find the guy in the middle with this function!";
  $start = "Try to find ";
  $end = " with this function!";
  $output = getBetween($content,$start,$end);
  echo $output;
?>

এটি "মাঝখানে লোক" ফিরে আসবে।


3

যদি আপনার একক স্ট্রিং থেকে একাধিক পুনরাবৃত্তি হয় এবং আপনার [স্টার্ট] এবং [\ শেষ] ধরণটি আলাদা। এখানে একটি ফাংশন যা অ্যারে আউটপুট দেয়।

function get_string_between($string, $start, $end){
    $split_string       = explode($end,$string);
    foreach($split_string as $data) {
         $str_pos       = strpos($data,$start);
         $last_pos      = strlen($data);
         $capture_len   = $last_pos - $str_pos;
         $return[]      = substr($data,$str_pos+1,$capture_len);
    }
    return $return;
}

3

এখানে একটি ফাংশন

function getInnerSubstring($string, $boundstring, $trimit=false) {
    $res = false;
    $bstart = strpos($string, $boundstring);
    if ($bstart >= 0) {
        $bend = strrpos($string, $boundstring);
        if ($bend >= 0 && $bend > $bstart)
            $res = substr($string, $bstart+strlen($boundstring), $bend-$bstart-strlen($boundstring));
    }
    return $trimit ? trim($res) : $res;
}

এটি ব্যবহার করুন

$string = "foo I wanna a cake foo";
$substring = getInnerSubstring($string, "foo");

echo $substring;

আউটপুট (নোট করুন যে এটি উপস্থিত থাকলে আপনার স্ট্রিংয়ের সামনে এবং সামনে ফাঁকা স্থানগুলি দেয়)

আমি একটি কেক চাই

আপনি যদি ট্রিম করতে চান রেজাল্ট ফাংশনটি ব্যবহার করুন

$substring = getInnerSubstring($string, "foo", true);

ফলাফল : এই ফাংশনটি ফিরে আসবে মিথ্যা যদি $boundstringমধ্যে পাওয়া যায়নি $stringঅথবা যদি $boundstringশুধুমাত্র একবার বিদ্যমান $string, অন্যথায় এটি প্রথম ও শেষ সংঘটন মধ্যে সাবস্ট্রিং দেখায় $boundstringমধ্যে $string


তথ্যসূত্র


আপনি যদি বন্ধনী ছাড়াই একটি আইফ-ক্লজ ব্যবহার করছেন তবে আপনি সম্ভবত জানেন যে এটি একটি খারাপ ধারণা?
xmoex

@ এক্সমেক্স, আপনি কোন IFধারাটির কথা বলছেন? আমি কিছু টাইপ করেছিলাম তবে সত্যি বলতে কী, আমি এখনই কিছু অদ্ভুত কিছু দেখতে পাচ্ছি না। IFউপরের ফাংশনে আমি উভয়ই ব্যবহার করেছি শর্তের আশেপাশে সঠিক বন্ধনী রয়েছে। প্রথম IFএছাড়াও কোঁকড়া বন্ধনী (ধনুর্বন্ধনী) যে ঘিরে 2 লাইন ব্লক, 2nd আছে IF'ই.এম. প্রয়োজন নেই, কারণ এটি একক লাইন কোড আছে। আমি কী মিস করছি?
WH1T3h4Ck5

আমি একক লাইন সম্পর্কে বলছি। আমি ভেবেছিলাম আপনার পোস্টের সম্পাদক এটি মুছে ফেলেছে কিন্তু তখন আমি দেখতে পেলাম যে এটি প্রথম স্থানে ছিল না। যদি আপনি ভবিষ্যতে কোড পরিবর্তন করেন তবে কখনও কখনও বাগগুলি খুঁজে পাওয়া শক্তির এই সাধারণ উত্স im
xmoex

@xmoex উচ্চ মতামত। ব্যবসায়ের প্রায় 20 বছর পরে আমি বলতে পারি যে বন্ধনীগুলি বাগের চূড়ান্ত বিরল কারণ (যাইহোক সঠিক ইন্ডেনশন প্রয়োজন)। ধনুর্বন্ধনী সঙ্গে একক লাইন চারপাশ কুশ্রী (মতামত বিষয়) এবং কোড বড় করা (সত্য বিষয়)। বেশিরভাগ সংস্থায় কোড সমাপ্তির জন্য অপ্রয়োজনীয় ধনুর্বন্ধনী অপসারণ প্রয়োজন। সত্য, অনভিজ্ঞ ব্যবহারকারীদের জন্য ডিবাগ করার সময় এটি খুঁজে পাওয়া শক্ত হতে পারে তবে এটি বৈশ্বিক সমস্যা নয়, তাদের শেখার পথে এক ধাপ। আমার ব্যক্তিগতভাবে, ব্রেসিসের সাথে কখনও বড় সমস্যা হয়নি, এমনকি জটিল বাসা বাঁধার ক্ষেত্রেও।
WH1T3h4Ck5

@ WH1T3h4Ck5 আমি আপনার মতামত এবং আপনার অভিজ্ঞতাকে সম্মান করি তবে আমি মোটেই নিশ্চিত নই। ব্রেসেস সিস্টেমের দৃষ্টিকোণ থেকে কোডটি বড় করে না। এটি ফাইলের আকারকে প্রসারিত করে তবে কম্পাইলার কী যত্ন করে? এবং যদি জেএস ব্যবহার করে থাকেন তবে আপনি সম্ভবত লাইভ হওয়ার আগে কোডগুলি স্বয়ংক্রিয়ভাবে কুশলিত করবেন। আমি মনে করি ব্রেস ব্যবহার করা সর্বদা কম ব্যথা করে তবে "মাঝে মাঝে" বাদ দিয়ে ...
xmoex

3

আলেজান্দ্রোর উত্তরের উন্নতি । আপনি $startবা $endতর্কগুলি খালি ছেড়ে দিতে পারেন এবং এটি স্ট্রিংয়ের শুরু বা শেষ ব্যবহার করবে।

echo get_string_between("Hello my name is bob", "my", ""); //output: " name is bob"

private function get_string_between($string, $start, $end){ // Get
    if($start != ''){ //If $start is empty, use start of the string
        $string = ' ' . $string;
        $ini = strpos($string, $start);
        if ($ini == 0) return '';
        $ini += strlen($start);
    }
    else{
        $ini = 0;
    }

    if ($end == '') { //If $end is blank, use end of string
        return substr($string, $ini);
    }
    else{
        $len = strpos($string, $end, $ini) - $ini; //Work out length of string
        return substr($string, $ini, $len);
    }
}

1

ব্যবহার করুন:

<?php

$str = "...server daemon started with pid=6849 (parent=6848).";
$from = "pid=";
$to = "(";

echo getStringBetween($str,$from,$to);

function getStringBetween($str,$from,$to)
{
    $sub = substr($str, strpos($str,$from)+strlen($from),strlen($str));
    return substr($sub,0,strpos($sub,$to));
}

?>

1

গার্সিয়া ওয়েবেডিভ এবং হেনরি ওয়াং থেকে কিছুটা উন্নত কোড। যদি খালি $ শুরু বা $ প্রান্তটি দেওয়া হয় তবে ফাংশনটি শুরু থেকে বা $ স্ট্রিংয়ের শেষে মানগুলি প্রদান করে। সমেত বিকল্পটি উপলভ্য, আমরা অনুসন্ধানের ফলাফল অন্তর্ভুক্ত করতে চাই বা না:

function get_string_between ($string, $start, $end, $inclusive = false){
    $string = " ".$string;

    if ($start == "") { $ini = 0; }
    else { $ini = strpos($string, $start); }

    if ($end == "") { $len = strlen($string); }
    else { $len = strpos($string, $end, $ini) - $ini;}

    if (!$inclusive) { $ini += strlen($start); }
    else { $len += strlen($end); }

    return substr($string, $ini, $len);
}

1

জুলিয়াস তিলভিকাসের পোস্টে আমাকে কিছু যোগ করতে হবে। আমি তার পোস্টে বর্ণিত এই জাতীয় সমাধানের সন্ধান করেছি। তবে আমি মনে করি একটি ভুল আছে। আমি দুটি স্ট্রিংয়ের মধ্যবর্তী স্ট্রিংটি পাই না, আমি এই সমাধানটি দিয়ে আরও পাই, কারণ আমাকে স্টার্ট স্ট্রিংয়ের দৈর্ঘ্যটি বিয়োগ করতে হবে। এটি করার সময়, আমি সত্যই দুটি স্ট্রিংয়ের মধ্যে স্ট্রিং পাই।

এখানে তার সমাধানের পরিবর্তনগুলি:

function get_string_between ($string, $start, $end, $inclusive = false){
    $string = " ".$string;

    if ($start == "") { $ini = 0; }
    else { $ini = strpos($string, $start); }

    if ($end == "") { $len = strlen($string); }
    else { $len = strpos($string, $end, $ini) - $ini - strlen($start);}

    if (!$inclusive) { $ini += strlen($start); }
    else { $len += strlen($end); }

    return substr($string, $ini, $len);
}

Greetz

ভী


1

এটি ব্যবহার করে দেখুন, এটি আমার জন্য কাজ, পরীক্ষার শব্দের মধ্যে ডেটা পান ।

$str = "Xdata test HD01 test 1data";  
$result = explode('test',$str);   
print_r($result);
echo $result[1];

1

পিএইচপি-র strposস্টাইলে এটি ফিরে আসবে falseযদি শুরুর চিহ্ন smবা শেষ চিহ্ন হয়em পাওয়া যায় না।

এই ফলাফলটি ( false) একটি খালি স্ট্রিং থেকে আলাদা যা প্রারম্ভিক এবং শেষের চিহ্নগুলির মধ্যে কিছু না থাকলে আপনি যা পান তা হ'ল।

function between( $str, $sm, $em )
{
    $s = strpos( $str, $sm );
    if( $s === false ) return false;
    $s += strlen( $sm );
    $e = strpos( $str, $em, $s );
    if( $e === false ) return false;
    return substr( $str, $s, $e - $s );
}

ফাংশনটি কেবল প্রথম ম্যাচেই ফিরে আসবে।

এটি সুস্পষ্ট তবে এটি উল্লেখযোগ্য যে ফাংশনটি প্রথমে smএবং তারপরে সন্ধান করবেem

এটি ইঙ্গিত দেয় যে আপনি emপ্রথমে অনুসন্ধান করতে হবে এবং তারপরে স্ট্রিংটিকে সন্ধানের পিছনে পার্স করতে হবে তবে আপনি পছন্দসই ফলাফল / আচরণ পেতে পারেন না sm


1

এটি এই ফাংশনটি আমি এর জন্য ব্যবহার করছি। আমি একক বা একাধিক ডিলিমিটারের জন্য একটি ফাংশনে দুটি উত্তর সংযুক্ত করেছি।

function getStringBetweenDelimiters($p_string, $p_from, $p_to, $p_multiple=false){
    //checking for valid main string  
    if (strlen($p_string) > 0) {
        //checking for multiple strings 
        if ($p_multiple) {
            // getting list of results by end delimiter
            $result_list = explode($p_to, $p_string);
            //looping through result list array 
            foreach ( $result_list AS $rlkey => $rlrow) {
                // getting result start position
                $result_start_pos   = strpos($rlrow, $p_from);
                // calculating result length
                $result_len         =  strlen($rlrow) - $result_start_pos;

                // return only valid rows
                if ($result_start_pos > 0) {
                    // cleanying result string + removing $p_from text from result
                    $result[] =   substr($rlrow, $result_start_pos + strlen($p_from), $result_len);                 
                }// end if 
            } // end foreach 

        // if single string
        } else {
            // result start point + removing $p_from text from result
            $result_start_pos   = strpos($p_string, $p_from) + strlen($p_from);
            // lenght of result string
            $result_length      = strpos($p_string, $p_to, $result_start_pos);
            // cleaning result string
            $result             = substr($p_string, $result_start_pos+1, $result_length );
        } // end if else 
    // if empty main string
    } else {
        $result = false;
    } // end if else 

    return $result;


} // end func. get string between

সাধারণ ব্যবহারের জন্য (দুটি ফেরত দেওয়া):

$result = getStringBetweenDelimiters(" one two three ", 'one', 'three');

অ্যারে ফলাফলের জন্য একটি সারণীতে প্রতিটি সারি পাওয়ার জন্য:

$result = getStringBetweenDelimiters($table, '<tr>', '</tr>', true);

1

আমি ব্যবহার করি

if (count(explode("<TAG>", $input))>1){
      $content = explode("</TAG>",explode("<TAG>", $input)[1])[0];
}else{
      $content = "";
}

সাবটাইটেল <TAG> আপনি যা চান না কেন ডিলিমিটারের জন্য।


1

আলেজান্দ্রো গার্সিয়া ইগলেসিয়াস যা রেখেছিলেন তার সম্পাদিত সংস্করণ।

এটি আপনাকে যে স্ট্রিংয়ের সুনির্দিষ্ট অবস্থান বাছাই করতে দেয় ফলাফল ফলাফলের সংখ্যার ভিত্তিতে পেতে চান।

function get_string_between_pos($string, $start, $end, $pos){
    $cPos = 0;
    $ini = 0;
    $result = '';
    for($i = 0; $i < $pos; $i++){
      $ini = strpos($string, $start, $cPos);
      if ($ini == 0) return '';
      $ini += strlen($start);
      $len = strpos($string, $end, $ini) - $ini;
      $result = substr($string, $ini, $len);
      $cPos = $ini + $len;
    }
    return $result;
  }

ব্যবহার:

$text = 'string has start test 1 end and start test 2 end and start test 3 end to print';

//get $result = "test 1"
$result = $this->get_string_between_pos($text, 'start', 'end', 1);

//get $result = "test 2"
$result = $this->get_string_between_pos($text, 'start', 'end', 2);

//get $result = "test 3"
$result = $this->get_string_between_pos($text, 'start', 'end', 3);

নির্দিষ্ট বিন্দুতে অনুসন্ধান শুরু করার জন্য স্ট্রপোসের একটি অতিরিক্ত input চ্ছিক ইনপুট রয়েছে। সুতরাং আমি পূর্ববর্তী অবস্থানটি $ সিপোসে সংরক্ষণ করি তাই যখন লুপের জন্য আবার চেক হয়, এটি যেখানে ছেড়ে গেছে তার শেষে শুরু হয়।


1

এখানে বিশাল সংখ্যক উত্তর সম্পাদিত অংশটির উত্তর দেয় না, আমি অনুমান করি যে সেগুলি আগে যুক্ত হয়েছিল। এটি একটি উত্তর হিসাবে উল্লেখ হিসাবে, regex সঙ্গে সম্পন্ন করা যেতে পারে। আমার একটা আলাদা পন্থা ছিল


এই ফাংশনটি স্ট্রিং অনুসন্ধান করে এবং এর মধ্যে প্রথম স্ট্রিংটি আবিষ্কার করে অফসেট অবস্থান থেকে শুরু করে $ শুরু এবং $ শেষ স্ট্রিংগুলির । এরপরে ফলাফলের শুরুতে নির্দেশ করতে $ অফসেট অবস্থান আপডেট করে। যদি $ অন্তর্ভুক্তডিলিমেটারগুলি সত্য হয় তবে এটি ফলাফলের মধ্যে ডিলিমিটারগুলি অন্তর্ভুক্ত করে।

যদি $ শুরু বা $ প্রান্তের স্ট্রিংটি খুঁজে পাওয়া যায় না, তবে তা শূন্য হয়। এটি ull স্ট্রিং, $ শুরু বা $ প্রান্তটি খালি স্ট্রিং হলে নালও দেয় returns

function str_between(string $string, string $start, string $end, bool $includeDelimiters = false, int &$offset = 0): ?string
{
    if ($string === '' || $start === '' || $end === '') return null;

    $startLength = strlen($start);
    $endLength = strlen($end);

    $startPos = strpos($string, $start, $offset);
    if ($startPos === false) return null;

    $endPos = strpos($string, $end, $startPos + $startLength);
    if ($endPos === false) return null;

    $length = $endPos - $startPos + ($includeDelimiters ? $endLength : -$startLength);
    if (!$length) return '';

    $offset = $startPos + ($includeDelimiters ? 0 : $startLength);

    $result = substr($string, $offset, $length);

    return ($result !== false ? $result : null);
}

নিম্নলিখিত ফাংশনটি দুটি স্ট্রিং (কোনও ওভারল্যাপ নয়) এর মধ্যে থাকা সমস্ত স্ট্রিংগুলি সন্ধান করে । এটির জন্য পূর্ববর্তী ফাংশনটি প্রয়োজন এবং তর্কগুলি একই। মৃত্যুদন্ড কার্যকর হওয়ার পরে, found অফসেটটি সর্বশেষ পাওয়া ফলাফলের স্ট্রিংয়ের শুরুতে নির্দেশ করে।

function str_between_all(string $string, string $start, string $end, bool $includeDelimiters = false, int &$offset = 0): ?array
{
    $strings = [];
    $length = strlen($string);

    while ($offset < $length)
    {
        $found = str_between($string, $start, $end, $includeDelimiters, $offset);
        if ($found === null) break;

        $strings[] = $found;
        $offset += strlen($includeDelimiters ? $found : $start . $found . $end); // move offset to the end of the newfound string
    }

    return $strings;
}

উদাহরণ:

str_between_all('foo 1 bar 2 foo 3 bar', 'foo', 'bar')দেয় [' 1 ', ' 3 ']

str_between_all('foo 1 bar 2', 'foo', 'bar')দেয় [' 1 ']

str_between_all('foo 1 foo 2 foo 3 foo', 'foo', 'foo')দেয় [' 1 ', ' 3 ']

str_between_all('foo 1 bar', 'foo', 'foo')দেয় []


0

ব্যবহার করুন:

function getdatabetween($string, $start, $end){
    $sp = strpos($string, $start)+strlen($start);
    $ep = strpos($string, $end)-strlen($start);
    $data = trim(substr($string, $sp, $ep));
    return trim($data);
}
$dt = "Find string between two strings in PHP";
echo getdatabetween($dt, 'Find', 'in PHP');

0

এখানে ব্যবহৃত get_string_between () ফাংশন নিয়ে আমার কিছু সমস্যা হয়েছিল। তাই আমি আমার নিজস্ব সংস্করণ নিয়ে এসেছি। হতে পারে এটি আমার মতো একই ক্ষেত্রে লোকদের সহায়তা করতে পারে।

protected function string_between($string, $start, $end, $inclusive = false) { 
   $fragments = explode($start, $string, 2);
   if (isset($fragments[1])) {
      $fragments = explode($end, $fragments[1], 2);
      if ($inclusive) {
         return $start.$fragments[0].$end;
      } else {
         return $fragments[0];
      }
   }
   return false;
}

0

কিছু সময় আগে এগুলি লিখেছিল, এটি অ্যাপ্লিকেশনগুলির বিস্তৃত ক্ষেত্রে খুব দরকারী।

<?php

// substr_getbykeys() - Returns everything in a source string that exists between the first occurance of each of the two key substrings
//          - only returns first match, and can be used in loops to iterate through large datasets
//          - arg 1 is the first substring to look for
//          - arg 2 is the second substring to look for
//          - arg 3 is the source string the search is performed on.
//          - arg 4 is boolean and allows you to determine if returned result should include the search keys.
//          - arg 5 is boolean and can be used to determine whether search should be case-sensative or not.
//

function substr_getbykeys($key1, $key2, $source, $returnkeys, $casematters) {
    if ($casematters === true) {
        $start = strpos($source, $key1);
        $end = strpos($source, $key2);
    } else {
        $start = stripos($source, $key1);
        $end = stripos($source, $key2);
    }
    if ($start === false || $end === false) { return false; }
    if ($start > $end) {
        $temp = $start;
        $start = $end;
        $end = $temp;
    }
    if ( $returnkeys === true) {
        $length = ($end + strlen($key2)) - $start;
    } else {
        $start = $start + strlen($key1);
        $length = $end - $start;
    }
    return substr($source, $start, $length);
}

// substr_delbykeys() - Returns a copy of source string with everything between the first occurance of both key substrings removed
//          - only returns first match, and can be used in loops to iterate through large datasets
//          - arg 1 is the first key substring to look for
//          - arg 2 is the second key substring to look for
//          - arg 3 is the source string the search is performed on.
//          - arg 4 is boolean and allows you to determine if returned result should include the search keys.
//          - arg 5 is boolean and can be used to determine whether search should be case-sensative or not.
//

function substr_delbykeys($key1, $key2, $source, $returnkeys, $casematters) {
    if ($casematters === true) {
        $start = strpos($source, $key1);
        $end = strpos($source, $key2);
    } else {
        $start = stripos($source, $key1);
        $end = stripos($source, $key2);
    }
    if ($start === false || $end === false) { return false; }
    if ($start > $end) {
        $temp = $start; 
        $start = $end;
        $end = $temp;
    }
    if ( $returnkeys === true) {
        $start = $start + strlen($key1);
        $length = $end - $start;
    } else {
        $length = ($end + strlen($key2)) - $start;  
    }
    return substr_replace($source, '', $start, $length);
}
?>

0

কিছু ত্রুটি ধরা সঙ্গে। বিশেষত, উপস্থাপিত বেশিরভাগ ক্রিয়াকলাপের অস্তিত্বের প্রয়োজন হয়, যখন আমার ক্ষেত্রে বাস্তবে আমার এটি alচ্ছিক হওয়া প্রয়োজন। এটি ব্যবহার করুন $ শেষটি isচ্ছিক এবং FALSE এর জন্য মূল্যায়ন করুন যদি $ শুরুটি অস্তিত্ব না থাকে:

function get_string_between( $string, $start, $end ){
    $string = " " . $string;
    $start_ini = strpos( $string, $start );
    $end = strpos( $string, $end, $start+1 );
    if ($start && $end) {
        return substr( $string, $start_ini + strlen($start), strlen( $string )-( $start_ini + $end ) );
    } elseif ( $start && !$end ) {
        return substr( $string, $start_ini + strlen($start) );
    } else {
        return FALSE;
    }

}

0

@ আলেজান্দ্রো ইগলেসিয়াস উত্তরের ইউটিএফ -8 সংস্করণ, লাতিন-বিহীন অক্ষরের জন্য কাজ করবে:

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = mb_strpos($string, $start, 0, 'UTF-8');
    if ($ini == 0) return '';
    $ini += mb_strlen($start, 'UTF-8');
    $len = mb_strpos($string, $end, $ini, 'UTF-8') - $ini;
    return mb_substr($string, $ini, $len, 'UTF-8');
}

$fullstring = 'this is my [tag]dog[/tag]';
$parsed = get_string_between($fullstring, '[tag]', '[/tag]');

echo $parsed; // (result = dog)


0

এটি এই ছোট ফাংশনটি ব্যবহার করে সহজেই করা যায়:

function getString($string, $from, $to) {
    $str = explode($from, $string);
    $str = explode($to, $str[1]);
    return $s[0];
}
$myString = "<html>Some code</html>";
print getString($myString, '<html>', '</html>');

// Prints: Some code

-1

আমি বছরের পর বছর ধরে এটি ব্যবহার করে আসছি এবং এটি ভালভাবে কাজ করে। সম্ভবত আরও দক্ষ করা যেতে পারে, কিন্তু

গ্র্যাবস্ট্রিং ("টেস্ট স্ট্রিং", "", "", ০) টেস্ট স্ট্রিং
গ্র্যাবস্ট্রিং ("টেস্ট স্ট্রিং", "টেস্ট", "", ০) প্রদান করে স্ট্রিং
গ্র্যাবস্ট্রিং ("টেস্ট স্ট্রিং", "এস", "", 5) স্ট্রিং ফেরত

function grabstring($strSource,$strPre,$strPost,$StartAt) {
if(@strpos($strSource,$strPre)===FALSE && $strPre!=""){
    return("");
}
@$Startpoint=strpos($strSource,$strPre,$StartAt)+strlen($strPre);
if($strPost == "") {
    $EndPoint = strlen($strSource);
} else {
    if(strpos($strSource,$strPost,$Startpoint)===FALSE){
        $EndPoint= strlen($strSource);
    } else {
        $EndPoint = strpos($strSource,$strPost,$Startpoint);
    }
}
if($strPre == "") {
    $Startpoint = 0;
}
if($EndPoint - $Startpoint < 1) {
    return "";
} else {
        return substr($strSource, $Startpoint, $EndPoint - $Startpoint);
}

}

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