2010-12-30 5 views
8

हाय मुझे स्ट्रिंग के अंत तक '_' से सभी वर्णों को हटाने की आवश्यकता है।स्ट्रिंग के अंत तक किसी निश्चित चरित्र से कुछ भी हटाने के लिए preg_replace का उपयोग कैसे करें?

मैं के साथ की कोशिश की:

$string = 'merry_christmas'; 

$string = preg_replace('/_*/','',$string); 

echo $string; // I need it to be: 'merry' 

... लेकिन नहीं।

विचार अंडरस्कोर वर्ण '_' और उसके सभी पात्रों को दाईं ओर निकालना है।

धन्यवाद

उत्तर

0
preg_replace('/_(.*)/','',$string); 
+0

, लेकिन आप, कोष्ठक की जरूरत नहीं है, क्योंकि वे स्मृति में के बाद '_' सामग्री रखने होगा और यह – spuas

11

निम्नलिखित बहुत तेजी से हो सकता है;

$str = 'merry_christmas'; 
$str = substr($str, 0, strpos($str, '_')); 
+1

+1 बहुत preg_replace – r92

+1

की तुलना में तेजी की जरूरत नहीं है क्या होगा अगर ऐसे स्ट्रिंग में कोई '_' नहीं है? – Gumbo

+1

फिर आपको कुछ ऐसा करने की ज़रूरत है; $ str = 'मेरी क्रिसमस'; $ str = ($ pos = strpos ($ str, '_'))? substr ($ str, 0, $ pos): $ str; – Erik

0

आपका पैटर्न, यह करने के लिए स्थापित करना चाहिए '/_.*/' तो गलत है: '।'

$string = preg_replace('/_.*/','',$string); 

इसका मतलब है किसी भी चरित्र, एक नज़र reg_ex ट्यूटोरियल

1

यह है "और सब कुछ अंडरस्कोर के बाद" है, तो

$string = 'merry_christmas'; 
$string = preg_replace('/_.*/','',$string); 
echo $string; 
3

आप सभी पर नियमित अभिव्यक्ति की जरूरत नहीं है का उपयोग करें, आप explode इस्तेमाल कर सकते हैं (substr शायद है बेहतर है, लेकिन मैं एक और विकल्प दिखाने के लिए) चाहते हैं:

$string = array_shift(explode('_', $string)); 

आपका भाव से काम नहीं करता है, क्योंकि यह केवल अन्य chara _ के परिवर्तनशील, नहीं से मेल खाता है cters।

6

पैटर्न /_*/ शून्य या अधिक लगातार _ से मेल खाता है। तो यह merry_christmasmerrychristmas में बदल जाएगा।

$string = preg_replace('/_.*/s', '', $string); 

लेकिन सबसे अच्छा तरीका है के रूप में दूसरों को पहले से ही उल्लेख किया है, रेगुलर एक्सप्रेशन का उपयोग नहीं हो सकता है:

आप की जरूरत क्या से मेल खाता है कि एक _ शून्य या अधिक स्वैच्छिक वर्णों के बाद /_.*/s है (s modifier ध्यान दें) । बुनियादी स्ट्रिंग ऑपरेशंस का उपयोग करके अन्य उल्लिखित समाधानों पर भी विचार करें। उनमें से सभी ऊपर की तरह एक नियमित अभिव्यक्ति का उपयोग करने के रूप में पठनीय नहीं हैं (अधिक महत्वपूर्ण: यदि स्ट्रिंग में _ नहीं है तो वे एक अप्रत्याशित परिणाम लौटा सकते हैं)। लेकिन वे कुछ परिस्थितियों में तेजी से हो सकते हैं।

1

strstr() को न भूलें, विशेष रूप से $before_needle पैरामीटर जो PHP 5.3.0 के रूप में उपलब्ध है।

$stub = strstr($string, '_', true) ?: $string; 
मेरी समाधान के रूप में एक ही
संबंधित मुद्दे

 संबंधित मुद्दे