यहाँ उत्तर का एक विशाल हिस्सा संपादित भाग का उत्तर नहीं देता है, मुझे लगता है कि उन्हें पहले जोड़ा गया था। यह रेगेक्स के साथ किया जा सकता है, क्योंकि एक उत्तर में उल्लेख है। मेरा एक अलग दृष्टिकोण था।
यह फ़ंक्शन $ स्ट्रिंग खोजता है और बीच में पहला स्ट्रिंग पाता है $ ऑफसेट स्थिति से शुरू होने वाले $ स्टार्ट और $ एंड । यह परिणाम की शुरुआत की ओर इशारा करने के लिए $ ऑफसेट स्थिति को अद्यतन करता है। यदि $ डिल्डिमिटर सत्य है, तो इसमें परिणाम में सीमांकक शामिल हैं।
यदि $ स्टार्ट या $ एंड स्ट्रिंग नहीं मिलती है, तो यह अशक्त हो जाता है। अगर $ स्ट्रिंग, $ शुरुआत, या $ अंत एक खाली स्ट्रिंग है तो यह भी अशक्त है।
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);
}
निम्न फ़ंक्शन सभी स्ट्रिंग्स को ढूंढता है जो दो स्ट्रिंग्स (कोई ओवरलैप्स) के बीच हैं । इसके लिए पिछले फ़ंक्शन की आवश्यकता है, और तर्क समान हैं। निष्पादन के बाद, अंतिम परिणाम परिणाम स्ट्रिंग की शुरुआत में $ ऑफसेट अंक।
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')
देता है []
।
\Illuminate\Support\Str::between('This is my name', 'This', 'name');
तो सुविधाजनक है। laravel.com/docs/7.x/helpers#method-str-between