एक निश्चित चरित्र के बाद सब कुछ कैसे प्राप्त करें?


140

मुझे एक स्ट्रिंग मिली है और मैं एक निश्चित मूल्य के बाद सब कुछ प्राप्त करना चाहूंगा। स्ट्रिंग हमेशा संख्याओं के एक सेट और फिर एक अंडरस्कोर के साथ शुरू होती है। मैं अंडरस्कोर के बाद बाकी स्ट्रिंग प्राप्त करना चाहता हूं। उदाहरण के लिए यदि मेरे पास निम्नलिखित तार हैं और मैं क्या चाहता हूं:

"123_String" -> "String"
"233718_This_is_a_string" -> "This_is_a_string"
"83_Another Example" -> "Another Example"

मैं इस तरह से कुछ करने के बारे में कैसे जा सकता हूं?

जवाबों:


333

strpos()पाता अंडरस्कोर की ऑफसेट, तो substr कि सूचकांक प्लस 1 से सब कुछ पकड़ लेता है, के बाद।

$data = "123_String";    
$whatIWant = substr($data, strpos($data, "_") + 1);    
echo $whatIWant;

यदि आप यह भी जांचना चाहते हैं कि क्या अंडरस्कोर वर्ण ( _) आपके स्ट्रिंग में मौजूद है तो इसे प्राप्त करने का प्रयास करने से पहले, आप निम्नलिखित का उपयोग कर सकते हैं:

if (($pos = strpos($data, "_")) !== FALSE) { 
    $whatIWant = substr($data, $pos+1); 
}

2
यदि अंडरस्कोर मौजूद है, तो इसका सबसे अच्छा विकल्प क्या होगा, जैसे कि इसका वैकल्पिक।
जॉन मैगनोलिया

2
@ जॉनमोगनोलिया: तब आप सिर्फ इस्तेमाल कर सकते हैंif (($pos = strpos($data, "_")) !== FALSE) { $whatIWant = substr($data, $pos+1); }
अमल मुरली

11
@ जॉनमोगनोलिया या थोड़ा फैंसी वन-लाइनर substr($data, (strrpos($data, '_') ?: -1) +1):।
फ्लू

2
@ मुझे लगता है कि आप कहने का मतलब है, पढ़ने के लिए कठिन है। IMO, कम लाइनों का मतलब कट्टरपंथी नहीं है।
MH

सुई नहीं मिलने पर कुछ फंक्शन / चार या झूठे होने पर यह फंक्शन वापस आ जाएगा:function StrAfterStr($S, $H) { return (($P = strpos($S, $H)) !== false) ? substr($S, $P + 1) : false; }
मार्कोडोर

14

strtokइस तरह की चीज के लिए एक अनदेखा कार्य है। इसका मतलब काफी तेज है।

$s = '233718_This_is_a_string';
$firstPart = strtok( $s, '_' );
$allTheRest = strtok( '' ); 

इस तरह से खाली स्ट्रिंग बाकी स्ट्रिंग को वापस करने के लिए मजबूर करेगा।

नायब अगर '_' के बाद कुछ भी नहीं था, तो आपको एक FALSEमूल्य मिलेगा $allTheRest, जैसा कि प्रलेखन में कहा गया है , === के साथ परीक्षण किया जाना चाहिए, ताकि अन्य झूठा मूल्यों से अलग हो सके।


3
सावधान रहें: स्ट्रैटोक चरित्र के बाद स्ट्रिंग के हिस्से को लौटाएगा यदि यह स्ट्रिंग में पहला चरित्र है, जैसे, strtok('a_b', '_')वापस आ जाएगा , aलेकिन strtok('_b', '_')वापस आ जाएगा b, न कि एक खाली स्ट्रिंग जैसा कि आप अपेक्षा करेंगे
क्विन कॉमेंडेंट

9

यहाँ का उपयोग करके विधि है explode:

$text = explode('_', '233718_This_is_a_string', 2)[1]; // Returns This_is_a_string

या:

$text = @end((explode('_', '233718_This_is_a_string', 2)));

2में limitपैरामीटर के लिए निर्दिष्ट करके explode(), यह स्ट्रिंग सीमांकक द्वारा अलग किए गए 2 अधिकतम तत्वों के साथ सरणी देता है। 2 तत्व ( [1]) को वापस करते हुए , बाकी स्ट्रिंग प्रदान करेगा।


यहाँ एक अन्य लाइनर का उपयोग करके strpos(जैसा कि @flu द्वारा सुझाया गया है ) है:

$needle = '233718_This_is_a_string';
$text = substr($needle, (strpos($needle, '_') ?: -1) + 1); // Returns This_is_a_string

2

अगर किसी को स्ट्रिंग के पहले भाग को निकालने की आवश्यकता है, तो कोशिश कर सकते हैं,

प्रश्न:

$s = "This_is_a_string_233718";

$text = $s."_".substr($s, 0, strrpos($s, "_"));

आउटपुट:

This_is_a_string


2

एक और आसान तरीका, का उपयोग कर strchr () या strstr () :

$str = '233718_This_is_a_string';

echo ltrim(strstr($str, '_'), '_'); // This_is_a_string

1
$string = "233718_This_is_a_string";
$withCharacter = strstr($string, '_'); // "_This_is_a_string"
echo substr($withCharacter, 1); // "This_is_a_string"

एक बयान में यह होगा।

echo substr(strstr("233718_This_is_a_string", '_'), 1); // "This_is_a_string"

0

मैं स्ट्रैचर () का उपयोग करता हूं। उदाहरण के लिए मैं इस फ़ंक्शन का उपयोग करने वाली फ़ाइल का एक्सटेंशन खोजने के लिए:

$string = 'filename.jpg';
$extension = strrchr( $string, '.'); //returns ".jpg"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.