स्ट्रिंग का हिस्सा कैसे निकालना है? [बन्द है]


152

मैं एक स्ट्रिंग का हिस्सा कैसे निकाल सकता हूं?

उदाहरण स्ट्रिंग: "REGISTER 11223344 here"

मैं "11223344"उपरोक्त उदाहरण स्ट्रिंग से कैसे निकाल सकता हूं ?


आपका प्रश्न अस्पष्ट / अस्पष्ट है। आप शब्द का उपयोग कर रहे हैं remove, लेकिन यह संभावना है कि आप इसका मतलब extractहै कि लक्षित स्ट्रिंग डेटाबेस में संग्रहीत किया जा सकता है।
मिकमैकुसा

@ मैकिने मुझे पूरा विश्वास है कि आपने कई सवालों के जवाब सही दिए हैं। इसके बारे में सोचो: ओपी REGISTER hereडेटाबेस में क्यों बचाना चाहेगा ?
मिकमैकुसा

2
@mickmackusa को दूर करने का पर्यायवाची हो सकता है, यानी 11223344 स्ट्रिंग से बाहर ले जाना, मैं यहां समस्या को देखने में विफल हूं। सबसे कम अस्पष्ट है, यह निश्चित रूप से "बर्बरतापूर्ण" नहीं है
निक

पूर्व-बर्खास्त संस्करण (ओं) को पढ़ें। @Nick stackoverflow.com/posts/2192170/revisions सच आपके दिमाग को बदल देगा। इस प्रश्न को अनक्लियर के रूप में बंद देखकर मुझे खुशी होगी।
मिकमैकुसा

2
@mickmackusa मैंने किया ... मैं आपकी बात को देखने में विफल हूं। यदि आपके पास इस तरह की एक बड़ी समस्या है जिस तरह से लिखा गया है कि इसे अपने आप से ठीक क्यों न करें
निक

जवाबों:


220

यदि आप विशेष रूप से "11223344" लक्ष्य कर रहे हैं, तो उपयोग करें str_replace:

// str_replace($search, $replace, $subject)
echo str_replace("11223344", "","REGISTER 11223344 here");

4
str_replace ($ खोज, $ प्रतिस्थापित, $ विषय)
drooh

119

आप str_replace () का उपयोग कर सकते हैं , जिसे इस रूप में परिभाषित किया गया है:

str_replace($search, $replace, $subject)

इसलिए आप कोड इस प्रकार लिख सकते हैं:

$subject = 'REGISTER 11223344 here' ;
$search = '11223344' ;
$trimmed = str_replace($search, '', $subject) ;
echo $trimmed ;

यदि आपको नियमित अभिव्यक्ति के माध्यम से बेहतर मिलान की आवश्यकता है तो आप preg_replace () का उपयोग कर सकते हैं ।


2
अगर किसी को regex से मेल खाने की ज़रूरत है, तो भी preg_replace () us2.php.net/manual/en/function.preg-replace.php
एलिजा लिन

4
यकीन नहीं होता कि यह उत्तर क्यों पोस्ट किया गया था, यह डोमिनिक के उत्तर का एक लंबा डुप्लिकेट और रोलांड के उत्तर का एक छोटा डुप्लिकेट है ...
CPHPython

23

11223344 मान लेना स्थिर नहीं है

$string="REGISTER 11223344 here";
$s = explode(" ",$string);
unset($s[1]);
$s = implode(" ",$s);
print "$s\n";

10
str_replace(find, replace, string, count)
  • लगता है आवश्यक। मान को खोजने के लिए निर्दिष्ट करता है
  • आवश्यक बदलें । मूल्य को खोजने में प्रतिस्थापित करने के लिए मूल्य निर्दिष्ट करता है
  • स्ट्रिंग आवश्यक है। स्ट्रिंग को खोजे जाने के लिए निर्दिष्ट करता है
  • गिनती वैकल्पिक। एक चर जो प्रतिस्थापन की संख्या को गिनता है

ओपी उदाहरण के अनुसार:

$Example_string = "REGISTER 11223344 here";
$Example_string_PART_REMOVED = str_replace('11223344', '', $Example_string);

// will leave you with "REGISTER  here"

// finally - clean up potential double spaces, beginning spaces or end spaces that may have resulted from removing the unwanted string
$Example_string_COMPLETED = trim(str_replace('  ', ' ', $Example_string_PART_REMOVED));
// trim() will remove any potential leading and trailing spaces - the additional 'str_replace()' will remove any potential double spaces

// will leave you with "REGISTER here"

1
आप कैसे प्रस्ताव करते हैं कि ओपी इस छद्म कोड का उपयोग करें?
मिकमैकुसा

6

जब आपको नियम आधारित मिलान की आवश्यकता होती है, तो आपको regex का उपयोग करने की आवश्यकता होती है

$string = "REGISTER 11223344 here";
preg_match("/(\d+)/", $string, $match);
$number = $match[1];

यह संख्या के पहले सेट से मेल खाएगा, इसलिए यदि आपको अधिक विशिष्ट प्रयास करने की आवश्यकता है:

$string = "REGISTER 11223344 here";
preg_match("/REGISTER (\d+) here/", $string, $match);
$number = $match[1];

preg_replace () बहुत आसान होगा यह नहीं होगा? us2.php.net/manual/en/function.preg-replace.php
एलिय्याह लिन

1
@ElijahLynn की जगह आपको चीजों को हटाने की आवश्यकता होती है, भविष्य के बदलाव या शोर टूट जाएगा। _Replace के माध्यम से ऐसा करना लेकिन _match काम करना जारी रखेगा।
ट्रैविसो

@TravisO अच्छी तरह से हाँ, लेकिन नहीं। वे दोनों लगभग समान कार्य कार्यान्वयन वार हैं, और संभावना है कि भविष्य में होने वाले परिवर्तन उनमें से किसी को भी प्रभावित करते हैं । केवल _match पर भविष्य के परिवर्तनों की एक समान संभावना है, इस उपयोग को अमान्य बना देता है और _replace अभी भी ठीक काम कर रहा है। इसके अलावा, यदि संभव हो तो पिछली कार्यक्षमता को ब्रेक न देने के लिए आमतौर पर संस्करण तैयार करना बहुत ही चौकस है।
सीटी।

आपको यहां कैप्चर ग्रुप की आवश्यकता नहीं है। वास्तव में, कैप्चर समूह का उपयोग अनावश्यक रूप से $matchसरणी को फुलाता है । कोष्ठक निकालें, फिर के माध्यम से acces $match[0]
मिकमैकुसा

5

substr () एक बिल्ट-इन php फंक्शन है जो एक स्ट्रिंग का हिस्सा देता है। फ़ंक्शन रूट () इनपुट के रूप में एक स्ट्रिंग लेगा, इंडेक्स फॉर्म जहां आप स्ट्रिंग को ट्रिम करना चाहते हैं। और एक वैकल्पिक पैरामीटर विकल्प की लंबाई है। आप http://php.net/manual/en/function.substr.php पर उचित दस्तावेज और उदाहरण कोड देख सकते हैं

नोट: एक स्ट्रिंग के लिए सूचकांक 0 से शुरू होता है।


आप यह कैसे प्रस्तावित करते हैं कि वांछित परिणाम प्राप्त करने के लिए ओपी को आपके सामान्य संकेत का उपयोग करना चाहिए?
मिकमैकुसा

मुझे यह उत्तर अस्पष्ट और कम मूल्य का लगता है।
मिकमैकुसा

1

डायनामिक रूप से, यदि आप किसी स्ट्रिंग के फिक्स्ड इंडेक्स (एस) से (ए) भाग (ए) को हटाना चाहते हैं, तो इस फ़ंक्शन का उपयोग करें:

/**
 * Removes index/indexes from a string, using a delimiter.
 * 
 * @param string $string
 * @param int|int[] $index An index, or a list of indexes to be removed from string.
 * @param string $delimiter 
 * @return string
 * @todo Note: For PHP versions lower than 7.0, remove scalar type hints (i.e. the
 * types before each argument) and the return type.
 */
function removeFromString(string $string, $index, string $delimiter = " "): string
{
    $stringParts = explode($delimiter, $string);

    // Remove indexes from string parts
    if (is_array($index)) {
        foreach ($index as $i) {
            unset($stringParts[(int)($i)]);
        }
    } else {
        unset($stringParts[(int)($index)]);
    }

    // Join all parts together and return it
    return implode($delimiter, $stringParts);
}

अपने उद्देश्य के लिए:

remove_from_str("REGISTER 11223344 here", 1); // Output: REGISTER here

इसका एक उपयोग कमांड-जैसे स्ट्रिंग्स को निष्पादित करना है, जिसे आप उनकी संरचनाओं को जानते हैं।


1
घोस्टडॉग ने पहले से ही एक विस्फोट-प्रत्यारोपण तकनीक का सुझाव दिया था, लेकिन मैं इस तरह के एक बुनियादी ऑपरेशन के लिए इस तरह की लंबी तकनीक का मनोरंजन करने की कल्पना नहीं कर सकता।
मिकमैकुसा

0

निम्नलिखित स्निपेट "यहाँ पंजीकृत करें"

$string = "REGISTER 11223344 here";

$result = preg_replace(
   array('/(\d+)/'),
   array(''),
   $string
);

print_r($result);

नीचे दिए गए अनुसार preg_replace () API हमारा उपयोग करता है।

$result = preg_replace(
    array('/pattern1/', '/pattern2/'),
    array('replace1', 'replace2'),
    $input_string
);

preg_replace()इस मामले में सरणियों को पारित करने का कोई कारण नहीं है। न ही कब्जा समूह का उपयोग करने का कोई लाभ है।
मिकमैकुसा

मैं सहमत हूँ। ऐरे को सिर्फ सुविधा के लिए जोड़ा जाता है। इसकी उपेक्षा की जा सकती है। यह कोई नुकसान नहीं करेगा। संख्याओं को छोड़कर कैप्चर समूह जोड़ा गया। यह दिए गए प्रश्न के अनुसार काम कर रहा है। और आगे संशोधन और ठीक ट्यूनिंग व्यक्तियों के आधार पर किया जा सकता है।
अरणगो_86

मेरी बात यह है कि, आपके स्निपेट में अनावश्यक समावेश हैं जो कि शामिल करने का कोई मतलब नहीं है।
मिकमैकुसा

-1

निम्न कार्य करें

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER(.*)here/','',$string);

यह "पंजीकरण" लौटाएगा

या

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER (.*) here/','',$string);

यह "यहाँ पंजीकृत करें"


4
क्या वह "REGISTER__here" नहीं लौटेगा, दो रिक्त स्थान के साथ (लगता है कि रिक्त स्थान के रूप में रेखांकित करें, टिप्पणी मुझे दो बाद के रिक्त स्थान की अनुमति नहीं देगी)? "(। *)" से पहले और बाद के रिक्त स्थान का बीक्यूज़।
टेकनिक्विस्ट

6
यह उत्तर AT LEAST 100% गलत है। प्रमाण: 3v4l.org/LDLEM इस उत्तर में 15 UVs क्यों हैं?
मिकमैकुसा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.