2011-03-16 23 views
8

मेरे चर इस तरह दिखेगा:पहले इससे पहले कि सब कुछ निकालें "," एक स्ट्रिंग में

AAAAAAA, बी बी CCCCCCCC

AAAA, BBBBBB CCCCCC

मैं सब कुछ निकालना चाहते हैं ","

परिणाम दिखने चाहिए:

बी बी CCCCCCCC

BBBBBB CCCCCC

मैं बाहर काम किया है इस के बाद "," सब कुछ को हटाने के लिए:

list($xxx) = explode(',', $yyyyy); 

दुर्भाग्य से मुझे पता है कि इसे हटाने के लिए काम करने के लिए प्राप्त करने के लिए न सब कुछ ","

धन्यवाद!

+0

संभव है कि आप पाते हैं [ 's ($ str) -> afterFirst (',')'] (https://github.com/delight-im/PHP-Str /blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php#L435) सहायक, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP-Str)। – caw

उत्तर

15

के रूप में यह अधिक समस्या आ जाती है वहाँ एक से अधिक एक अल्पविराम मैं, विस्फोट उपयोग करने की अनुशंसा नहीं होता।

// removes everything before the first , 
$new_str = substr($str, ($pos = strpos($str, ',')) !== false ? $pos + 1 : 0); 

संपादित करें:

if(($pos = strpos($str, ',')) !== false) 
{ 
    $new_str = substr($str, $pos + 1); 
} 
else 
{ 
    $new_str = get_last_word($str); 
} 
+0

यह वह है जिसे आप उपयोग करना चाहिए, IMHO – droope

+0

+1 - यह regexp की तुलना में तेज़ और अधिक पठनीय (IMHO) है। इसके साथ जाओ – Carpetsmoker

+0

धन्यवाद यह बहुत अच्छा काम किया! – Andrej

1

आप कर सकते हैं:

$arr = explode(',', $yyyyy); 
unset($arr[0]); 
echo implode($arr); 
+0

मुझे लगता है कि यह अच्छा है। हालांकि आपको इंपोड (',', $ arr) गूंजने की आवश्यकता है; अन्य अल्पविरामों को खोने के लिए नहीं। – embe

+0

@embe प्रश्न के उदाहरण – Neal

+0

सच में कोई अन्य कॉमा नहीं है। यह मेरे मामले में था, और "पहले से पहले सब कुछ हटाएं" का उत्तर देने के लिए, "एक स्ट्रिंग में" मुझे लगता है कि यह जोड़ना अच्छा है। एक अच्छे समाधान के लिए धन्यवाद। – embe

25

चूंकि यह एक सरल स्ट्रिंग परिवर्तन है, तो आपको पहले अल्पविराम से पहले सभी पात्रों को दूर करने के निम्न का उपयोग कर सकते हैं:

$string = preg_replace('/^[^,]*,\s*/', '', $input); 

preg_replace() की अनुमति देता है आप एक नियमित अभिव्यक्ति के आधार पर एक स्ट्रिंग के हिस्सों को प्रतिस्थापित करने के लिए। आइए नियमित अभिव्यक्ति पर नज़र डालें।

  • / is the start delimiter
    • ^ is the "start of string" anchor
    • [^,] every character that isn't a comma (^ negates the class here)
      • * repeated zero or more times
    • , regular comma
    • \s any whitespace character
      • * repeated zero or more times
  • / end delimiter
+2

नियमित अभिव्यक्ति आपके मित्र हैं। – Canuteson

+0

क्या होगा यदि मैं ** से पहले प्रत्येक char को हटाना चाहता हूं और ** कॉमा? –

+0

सहित मैं इसे ढूंढ रहा हूं। '''' '' '' '' 'को बदलकर,' '' पूरा कोड बन जाएगा: '$ string = preg_replace ('/^[^,] *, \ s * /', ',', $ इनपुट);' – hyip

2

इस कोशिश के बाद पिछले सामान हो जाता है, अगर नहीं, मौजूद है यह पिछले अंतरिक्ष से जाँच करेगा, मैंने इसे आसान बनाने के लिए इसे एक फ़ंक्शन में लपेट लिया:

<?php 
$value='AAAA BBBBBB CCCCCC'; 
function checkstr($value){ 
    if(strpos($value,',')==FALSE){ 
     return trim(substr(strrchr($value, ' '), 1)); 
    }else{ 
     return trim(substr($value, strpos($value,',')),','); 
    } 
} 

echo checkstr($value); 
?> 
+0

यह भी अच्छा काम करता है! लेकिन यदि कोई "," नहीं है तो स्ट्रिंग के अंतिम शब्द का उपयोग करने के लिए मैं स्क्रिप्ट को कैसे बता सकता हूं? – Andrej

0

रेगेक्स आम तौर पर महंगा है और मैं इसे इस तरह के सरल के लिए अनुशंसा नहीं करता। विस्फोट का उपयोग करके और इसे 2 तक सीमित करने के परिणामस्वरूप शायद str_pos का उपयोग करने के समान निष्पादन समय होगा, लेकिन आपको दूसरी स्ट्रिंग में संग्रहीत आवश्यक स्ट्रिंग उत्पन्न करने के लिए और कुछ नहीं करना होगा।

//simple answer 
$str = explode(',', $yyyyy,2)[1]; 

या

//better 

$arr = explode(',', $yyyyy,2); 
$str = isset($arr[1]) ? $arr[1] : ''; 
संबंधित मुद्दे