2011-11-11 6 views
6

मैं एक स्ट्रिंग जहां संख्या (डैश सहित), उदाहरण के लिए कोई आसन्न कैरेक्टर हैं से सभी स्टैंडअलोन संख्या को बदलने के लिए देख रहा हूँ:preg_replace स्टैंडअलोन नंबर निकाल सकते

टेस्ट 3 स्ट्रिंग 49Test 49test9 9

लौट चाहिए टेस्ट स्ट्रिंग 49Test 49Test9

अब तक मैं के साथ प्रयोग करना किया गया है:

$str = 'Test 3 string 49Test 49test9 9'; 
    $str= preg_replace('/[^a-z\-]+(\d+)[^a-z\-]+?/isU', ' ', $str); 
    echo $str; 

हालांकि कोई भाग्य के साथ, इस रिटर्न

टेस्ट स्ट्रिंग 9Test 9test9

स्ट्रिंग के भाग बाहर छोड़ रहा है, मैं मैच के लिए [0-9] जोड़ने के लिए सोचा था, लेकिन कोई लाभ नहीं हुआ , मुझे क्या याद आ रहा है, इतना आसान लगता है?

अग्रिम धन्यवाद

+0

क्या आप संख्याओं को एक स्पेस कैरेक्टर (जैसे आपके उदाहरण में) से प्रतिस्थापित करना चाहते हैं या बस उन्हें हटा दें? – Phil

उत्तर

7

एक शब्द सीमा और हाइफ़न के लिए नकारात्मक देखो के arounds उपयोग करने का प्रयास है, जैसे

$str = preg_replace('/\b(?<!-)\d+(?!-)\b/', '', $str); 
+0

यह काम करता है सिवाय इसके कि मुझे 2-टेस्ट की अनुमति देने की आवश्यकता है, क्षमा करें अगर मैं उस पर बहुत स्पष्ट नहीं था :-) – user1041334

+1

अच्छा, मुझे \ b के बारे में पता नहीं था। जानकारी के लिए धन्यवाद! –

+0

@ user1041334 मैंने नकारात्मक लुक-आस-पास का उपयोग करके हाइफ़न समस्या का एक संभावित समाधान जोड़ा है। देखें कि यह – Phil

0

मैं explode(" ",$str) का उपयोग कर सुझाव है कि में "शब्दों" की एक सरणी प्राप्त करने के लिए अपने स्ट्रिंग। फिर एकल संख्याओं को फ़िल्टर करना आसान होना चाहिए।

1

ऐसा नहीं है कि जटिल, यदि आप रिक्त स्थान :)

<?php 
$str = 'Test 3 string 49Test 49test9 9'; 
$str = preg_replace('/(\s(\d+)\s|\s(\d+)$|^(\d+)\s)/iU', '', $str); 
echo $str; 
+0

धन्यवाद, काम करता है जादू! वास्तव में – user1041334

+0

; मुझे सही साबित होना है।@ फिल का जवाब शायद मेरे मुकाबले बेहतर समाधान है। मैं अभी तक \ b के बारे में नहीं पता था। मैं अब करुँ। StackOverflow ठंडा है। –

1

घड़ी इस प्रयास करें, मैं अपने अतिरिक्त आवश्यकता को कवर करने के 5-एबीसी

\s*(?<!\B|-)\d+(?!\B|-)\s* 

और के साथ बदलें पर मेल नहीं करने की कोशिश की एक ही स्थान!

देखें कि यह here online on Regexr

समस्या तो चरित्र - के साथ शब्द सीमा का विस्तार करने के लिए है। मैं नकारात्मक नज़र arounds का उपयोग करने और - या \B (नहीं एक शब्द सीमा)

इसके अतिरिक्त मैं \s* के साथ आसपास के खाली स्थान के मिलान कर रहा हूँ की तलाश कर यह उपलब्धि हासिल है, इसलिए यदि आप एक ही स्थान के साथ बदलने के लिए।

+0

रिक्त स्थान को कम करने के लिए अच्छा काम – Phil

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

  • कोई संबंधित समस्या नहीं^_^