खोज…


टिप्पणियों

Regex को अन्य उपयोगों के लिए उपयोग किया जाना चाहिए इसके अलावा तार से तार निकलना या अन्यथा टुकड़ों में तार काटना।

विभाजकों द्वारा एक स्ट्रिंग को विभाजित करना

explode और strstr सरल तरीकों विभाजक से सबस्ट्रिंग मिल रहे हैं।

पाठ के कई हिस्सों से युक्त एक स्ट्रिंग जो एक आम चरित्र द्वारा अलग की जाती है, उसे explode फ़ंक्शन के साथ भागों में विभाजित किया जा सकता है।

$fruits = "apple,pear,grapefruit,cherry";
print_r(explode(",",$fruits)); // ['apple', 'pear', 'grapefruit', 'cherry']

विधि एक सीमा पैरामीटर का भी समर्थन करती है जिसका उपयोग निम्नानुसार किया जा सकता है:

$fruits= 'apple,pear,grapefruit,cherry';

यदि सीमा पैरामीटर शून्य है, तो इसे 1 माना जाता है।

print_r(explode(',',$fruits,0)); // ['apple,pear,grapefruit,cherry']

यदि सीमा निर्धारित और सकारात्मक है, तो दिए गए सरणी में अंतिम तत्व के साथ अधिकतम सीमा वाले तत्व होंगे, जिसमें बाकी स्ट्रिंग शामिल होंगे।

print_r(explode(',',$fruits,2)); // ['apple', 'pear,grapefruit,cherry']

यदि सीमा पैरामीटर नकारात्मक है, तो अंतिम-छोड़ के सभी घटक वापस आ जाते हैं।

print_r(explode(',',$fruits,-1)); // ['apple', 'pear', 'grapefruit']

explode को एक लाइन में चर में स्ट्रिंग को पार्स करने के लिए list के साथ जोड़ा जा सकता है:

$email = "[email protected]";
list($name, $domain) = explode("@", $email);

हालांकि, सुनिश्चित करें कि explode के परिणाम में पर्याप्त तत्व हैं, या अपरिभाषित सूचकांक चेतावनी शुरू हो जाएगी।

strstr दूर या केवल स्ट्रिप्स दिया सुई की पहली घटना से पहले-स्ट्रिंग देता है।

$string = "1:23:456";
echo json_encode(explode(":", $string)); // ["1","23","456"]
var_dump(strstr($string, ":")); // string(7) ":23:456"

var_dump(strstr($string, ":", true)); // string(1) "1"

विकल्प के साथ एक विकल्प की खोज

strpos को सुई की पहली घटना से पहले हिस्टैक में बाइट्स की संख्या के रूप में समझा जा सकता है।

var_dump(strpos("haystack", "hay")); // int(0)
var_dump(strpos("haystack", "stack")); // int(3)
var_dump(strpos("haystack", "stackoverflow"); // bool(false)

अगर एक विकल्प मौजूद है तो जाँच करना

TRUE या FALSE के खिलाफ जाँच से सावधान रहें क्योंकि यदि 0 का इंडेक्स लौटाया जाता है तो एक स्टेटमेंट इसे FALSE के रूप में देखेगा।

$pos = strpos("abcd", "a"); // $pos = 0;
$pos2 = strpos("abcd", "e"); // $pos2 = FALSE;

// Bad example of checking if a needle is found.
if($pos) { // 0 does not match with TRUE.
    echo "1. I found your string\n";
}
else {
    echo "1. I did not found your string\n";
}

// Working example of checking if needle is found.
if($pos !== FALSE) {
    echo "2. I found your string\n";
}
else {
    echo "2. I did not found your string\n";
}

// Checking if a needle is not found
if($pos2 === FALSE) {
    echo "3. I did not found your string\n";
}
else {
    echo "3. I found your string\n";
}

पूरे उदाहरण का आउटपुट:

1. I did not found your string 
2. I found your string 
3. I did not found your string 

एक ऑफसेट से शुरू खोजें

// With offset we can search ignoring anything before the offset
$needle = "Hello";
$haystack = "Hello world! Hello World";

$pos = strpos($haystack, $needle, 1); // $pos = 13, not 0

एक सबरिंग की सभी घटनाएं प्राप्त करें

$haystack = "a baby, a cat, a donkey, a fish";
$needle = "a ";
$offsets = [];
// start searching from the beginning of the string
for($offset = 0;
        // If our offset is beyond the range of the
        // string, don't search anymore.
        // If this condition is not set, a warning will
        // be triggered if $haystack ends with $needle
        // and $needle is only one byte long.
        $offset < strlen($haystack); ){
    $pos = strpos($haystack, $needle, $offset);
    // we don't have anymore substrings
    if($pos === false) break;
    $offsets[] = $pos;
    // You may want to add strlen($needle) instead,
    // depending on whether you want to count "aaa"
    // as 1 or 2 "aa"s.
    $offset = $pos + 1;
}
echo json_encode($offsets); // [0,8,15,25]

नियमित अभिव्यक्ति का उपयोग करके स्ट्रिंग स्ट्रिंग

preg_match का उपयोग नियमित अभिव्यक्ति का उपयोग करके स्ट्रिंग को पार्स करने के लिए किया जा सकता है। कोष्ठक में संलग्न अभिव्यक्ति के हिस्सों को सबपाटन्ट्स कहा जाता है और उनके साथ आप स्ट्रिंग के अलग-अलग हिस्सों को चुन सकते हैं।

$str = "<a href=\"http://example.org\">My Link</a>";
$pattern = "/<a href=\"(.*)\">(.*)<\/a>/";
$result = preg_match($pattern, $str, $matches);
if($result === 1) {
    // The string matches the expression
    print_r($matches);
} else if($result === 0) {
    // No match
} else {
    // Error occured
}

उत्पादन

Array
(
    [0] => <a href="http://example.org">My Link</a>
    [1] => http://example.org
    [2] => My Link
)

सबस्ट्रिंग

आरंभ और लंबाई मापदंडों द्वारा निर्दिष्ट स्ट्रिंग का भाग देता है।

var_dump(substr("Boo", 1)); // string(2) "oo"

यदि मल्टी-बाइट कैरेक्टर स्ट्रिंग्स के मिलने की संभावना है, तो mb_substr का उपयोग करना अधिक सुरक्षित होगा।

$cake = "cakeæøå";
var_dump(substr($cake, 0, 5)); // string(5) "cake�"
var_dump(mb_substr($cake, 0, 5, 'UTF-8')); // string(6) "cakeæ"

एक अन्य संस्करण है root_replace फ़ंक्शन, जो एक स्ट्रिंग के एक हिस्से के भीतर पाठ को बदलता है।

var_dump(substr_replace("Boo", "0", 1, 1)); // string(3) "B0o"
var_dump(substr_Replace("Boo", "ts", strlen("Boo"))); // string(5) "Boots"

मान लें कि आप एक विशिष्ट शब्द को एक स्ट्रिंग में खोजना चाहते हैं - और Regex का उपयोग नहीं करना चाहते हैं।

$hi = "Hello World!";
$bye = "Goodbye cruel World!";

var_dump(strpos($hi, " ")); // int(5)
var_dump(strpos($bye, " ")); // int(7)

var_dump(substr($hi, 0, strpos($hi, " "))); // string(5) "Hello"
var_dump(substr($bye, -1 * (strlen($bye) - strpos($bye, " ")))); // string(13) " cruel World!"

// If the casing in the text is not important, then using strtolower helps to compare strings
var_dump(substr($hi, 0, strpos($hi, " ")) == 'hello'); // bool(false)
var_dump(strtolower(substr($hi, 0, strpos($hi, " "))) == 'hello'); // bool(true)

एक अन्य विकल्प एक ईमेल का एक बहुत ही मूल पार्सिंग है।

$email = "[email protected]";
$wrong = "foobar.co.uk";
$notld = "foo@bar";

$at = strpos($email, "@"); // int(4)
$wat = strpos($wrong, "@"); // bool(false)
$nat = strpos($notld , "@"); // int(3)

$domain = substr($email, $at + 1); // string(11) "example.com"
$womain = substr($wrong, $wat + 1); // string(11) "oobar.co.uk"
$nomain = substr($notld, $nat + 1); // string(3) "bar"

$dot = strpos($domain, "."); // int(7)
$wot = strpos($womain, "."); // int(5)
$not = strpos($nomain, "."); // bool(false)

$tld = substr($domain, $dot + 1); // string(3) "com"
$wld = substr($womain, $wot + 1); // string(5) "co.uk"
$nld = substr($nomain , $not + 1); // string(2) "ar"

// string(25) "[email protected] is valid"
if ($at && $dot) var_dump("$email is valid");
else var_dump("$email is invalid");

// string(21) "foobar.com is invalid"
if ($wat && $wot) var_dump("$wrong is valid");
else var_dump("$wrong is invalid");

// string(18) "foo@bar is invalid"
if ($nat && $not) var_dump("$notld is valid");
else var_dump("$notld is invalid");

// string(27) "foobar.co.uk is an UK email"
if ($tld == "co.uk") var_dump("$email is a UK address");
if ($wld == "co.uk") var_dump("$wrong is a UK address");
if ($nld == "co.uk") var_dump("$notld is a UK address");

या यहां तक कि एक ब्लर्ब के अंत में "पढ़ना जारी रखें" या "..."

$blurb = "Lorem ipsum dolor sit amet";
$limit = 20;

var_dump(substr($blurb, 0, $limit - 3) . '...'); // string(20) "Lorem ipsum dolor..."


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow