मैं बस सोच रहा हूं कि मैं PHP में एक निश्चित सबस्ट्रिंग के बाद सब कुछ कैसे हटा सकता हूं
उदाहरण के लिए:
Posted On April 6th By Some Dude
मुझे यह पसंद है ताकि यह सभी पाठों को हटा दे, और इसके बाद, उप स्ट्रिंग "बाय"
धन्यवाद
मैं बस सोच रहा हूं कि मैं PHP में एक निश्चित सबस्ट्रिंग के बाद सब कुछ कैसे हटा सकता हूं
उदाहरण के लिए:
Posted On April 6th By Some Dude
मुझे यह पसंद है ताकि यह सभी पाठों को हटा दे, और इसके बाद, उप स्ट्रिंग "बाय"
धन्यवाद
जवाबों:
$variable = substr($variable, 0, strpos($variable, "By"));
सादे अंग्रेजी में: मुझे उस स्ट्रिंग का हिस्सा दें जो शुरुआत में शुरू होता है और उस स्थिति में समाप्त होता है जहां आप पहले अपराधी का सामना करते हैं।
यदि आप PHP 5.3+ का उपयोग कर रहे हैं, तो $ str_needle फ्लैग ऑफ़ स्ट्रैस () पर एक नज़र डालें
$s = 'Posted On April 6th By Some Dude';
echo strstr($s, 'By', true);
FALSEयदि स्ट्रिंग का भाग नहीं मिला है तो यह वापस आ जाएगा । तो समाधान हो सकता है:echo strstr($s, 'By', true) ?: $s;
explode(' By', $s)[0]IMHO होगा
कैसे उपयोग करने के बारे में explode:
$input = 'Posted On April 6th By Some Dude';
$result = explode(' By',$input);
return $result[0];
लाभ:
$result[1]लौटेगा Some Dude)एक तरीका होगा:
$str = 'Posted On April 6th By Some Dude';
echo strtok($str, 'By'); // Posted On April 6th
By2 पैरामीटर में किसी भी वर्ण द्वारा विभाजित नहीं होगा । मतलब, यह Bया तो फूट जाएगा y। तकनीकी रूप से, यह सब कुछ एक से पहले नहीं हो रहा है By।
strtok('a:b', ':')वापस आ जाएगा , aलेकिन strtok(':b', ':')वापस आ जाएगा b, जैसा कि आप अपेक्षा नहीं करेंगे।
इसे इस्तेमाल करे।
function strip_after_string($str,$char)
{
$pos=strpos($str,$char);
if ($pos!==false)
{
//$char was found, so return everything up to it.
return substr($str,0,$pos);
}
else
{
//this will return the original string if $char is not found. if you wish to return a blank string when not found, just change $str to ''
return $str;
}
}
उपयोग:
<?php
//returns Apples
$clean_string= strip_after_string ("Apples, Oranges, Banannas",",");
?>
ऑस्टिन का जवाब आपके उदाहरण के मामले में काम करता है।
आम तौर पर, आप नियमित अभिव्यक्ति कार्यों को देखने के लिए अच्छी तरह से करते हैं, जब आप जिस स्ट्रिंग पर विभाजन कर रहे हैं वह स्ट्रिंग के बीच भिन्न हो सकती है:
$ चर = preg_replace ('/ by। * /', '', $ चर);
preg_replace एक तरह से प्रदान करता है:
$newText = preg_replace('/\bBy.*$/', '', $text);
नीचे सबसे कारगर विधि (रन-टाइम) के द्वारा पहली बार तब जब सब कुछ काट रहा है के द्वारा एक स्ट्रिंग में। यदि तक मौजूद नहीं है, संपूर्ण स्ट्रिंग दिया जाता है। परिणाम $ sResult में है।
$sInputString = "Posted On April 6th By Some Dude";
$sControl = "By";
//Get Position Of 'By'
$iPosition = strpos($sInputString, " ".$sControl);
if ($iPosition !== false)
//Cut Off If String Exists
$sResult = substr($sInputString, 0, $iPosition);
else
//Deal With String Not Found
$sResult = $sInputString;
//$sResult = "Posted On April 6th"
यदि आप केस संवेदी नहीं होना चाहते हैं, तो स्ट्रैप के बजाय स्ट्रिप का उपयोग करें । यदि आपको लगता है करके एक बार से अधिक मौजूद हो सकता है और अंतिम बार होने के बाद कटौती सब कुछ, उपयोग करना चाहते हैं strrpos ।
नीचे एक कम कुशल विधि है लेकिन यह कम कोड स्थान लेता है। यह विधि अधिक लचीली भी है और आपको कोई भी नियमित अभिव्यक्ति करने की अनुमति देती है।
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "By";
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April 6th"
उदाहरण के लिए, यदि आप दिन के बाद सब कुछ निकालना चाहते हैं:
$sInputString = "Posted On April 6th By Some Dude";
$pControl = "[0-9]{1,2}[a-z]{2}"; //1 or 2 numbers followed by 2 lowercase letters.
$sResult = preg_replace("' ".$pControl.".*'s", '', $sInputString);
//$sResult = "Posted On April"
असंवेदनशील मामले के लिए, मैं इस तरह से संशोधक जोड़ें:
$sResult = preg_replace("' ".$pControl.".*'si", '', $sInputString);
अतीत पिछले सब कुछ प्राप्त करने के लिए द्वारा इस तरह शुरुआत में अगर आपको लगता है वहाँ एक से अधिक हो सकता है, एक अतिरिक्त जोड़ें *।:
$sResult = preg_replace("'.* ".$pControl.".*'si", '', $sInputString);
लेकिन यहाँ भी एक बहुत शक्तिशाली तरीका है जिसे आप preg_match का उपयोग करने के लिए कर सकते हैं कि आप क्या करने की कोशिश कर रहे हैं:
$sInputString = "Posted On April 6th By Some Dude";
$pPattern = "'Posted On (.*?) By (.*?)'s";
if (preg_match($pPattern, $sInputString, $aMatch)) {
//Deal With Match
//$aMatch[1] = "April 6th"
//$aMatch[2] = "Some Dude"
} else {
//No Match Found
}
नियमित अभिव्यक्तियाँ पहली बार में भ्रामक लग सकती हैं, लेकिन एक बार मास्टर करने के बाद वे वास्तव में शक्तिशाली और आपके सबसे अच्छे दोस्त हो सकते हैं! सौभाग्य!
क्यों...
यह ज्यादातर लोगों की ज़रूरतों के लिए ओवरकिल है, लेकिन, यह कई चीजों को संबोधित करता है, जो ऊपर प्रत्येक व्यक्ति का जवाब नहीं है। जिन वस्तुओं को यह संबोधित करता है, उनमें से तीन मेरी जरूरतों के लिए आवश्यक थीं। तंग ब्रैकेट और टिप्पणियों को छोड़ने के साथ, यह अभी भी कोड की केवल 13 लाइनों पर पठनीय रह सकता है।
यह निम्नलिखित को संबोधित करता है:
उपयोग:
मूल स्ट्रिंग, खोज चार / स्ट्रिंग, "R" / "L" को दाईं या बाईं ओर से शुरू करने के लिए भेजें, केस सेंसिटिविटी के लिए सही / गलत। उदाहरण के लिए, "असंवेदनशील" केस असंवेदनशील, स्ट्रिंग में, राइट साइड से खोजें।
echo TruncStringAfterString("Now Here Are Some Words Here Now","here","R",false);
आउटपुट "अब यहां कुछ शब्द हैं"। "R" को "L" में बदलने से आउटपुट: "Now" होगा।
यहाँ समारोह है:
function TruncStringAfterString($origString,$truncChar,$startSide,$caseSensitive)
{
if ($caseSensitive==true && strstr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strrpos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return strstr($origString,$truncChar,true);
}
}
elseif ($caseSensitive==false && stristr($origString,$truncChar)!==false)
{
// IF START RIGHT SIDE:
if (strtoupper($startSide)=="R" || $startSide==false)
{ // Found, strip off all chars from truncChar to end
return substr($origString,0,strripos($origString,$truncChar));
}
// IF START LEFT SIDE:
elseif (strtoupper($startSide)=="L" || $startSide="" || $startSide==true)
{ // Found, strip off all chars from truncChar to end
return stristr($origString,$truncChar,true);
}
}
else
{ // NOT found - return origString untouched
return $origString; // Nothing to do here
}
}