2010-07-26 12 views
11

मेरे पास दो उदाहरण फ़ाइल नाम स्ट्रिंग हैं:Regex: स्ट्रिंग में अंतिम बिंदु से कैसे मिलान करें

jquery.ui.min.js 
jquery.ui.min.css 

मैं केवल अंतिम बिंदु से मेल खाने के लिए किस रेगेक्स का उपयोग कर सकता हूं? मुझे कुछ और चाहिए, सिर्फ अंतिम बिंदु नहीं।

मैं जो कर रहा हूं उस पर थोड़ा और। मैं फ़ाइल नाम को सरणी में विभाजित करने के लिए PHP के preg_split() फ़ंक्शन का उपयोग कर रहा हूं। फ़ंक्शन किसी भी मैचों को हटा देता है और आपको विभाजन के बीच तत्वों के साथ एक सरणी देता है। मैं इसे jquery.ui.min.js को एक सरणी में विभाजित करने की कोशिश कर रहा हूं जो इस तरह दिखता है:

array[0] = jquery.ui.min 
array[1] = js 
+0

पिछले डॉट मिलान है मुश्किल नहीं है, यह आप '.' परिणाम के रूप में दे देंगे। क्या आपका मतलब है "अंतिम बिंदु के बाद सब कुछ", यानी "विस्तार"? – deceze

+0

मुझे केवल अंतिम बिंदु चाहिए, और कुछ भी नहीं। मैंने विस्तार से मिलान किया है \ .. [^ \।] + $ अब मुझे डॉट प्राप्त करने की आवश्यकता है। –

उत्तर

11

मुझे लगता है कि आपको preg_split का उपयोग करने में कठिनाई होगी, preg_match बेहतर विकल्प होना चाहिए।

preg_match('/(.*)\.([^.]*)$/', $filename, $matches); 

वैकल्पिक रूप से, pathinfo पर एक नज़र डालें। इसके लिए regex का उपयोग करने के लिए कोई कारण नहीं है

$filename = substr($file, 0, strrpos($file, '.')); 
$extension = substr($file, strrpos($file, '.') + 1); 
+0

कूल! pathinfo() बिल्कुल वही करता है जो मुझे चाहिए। धन्यवाद! –

+0

सहमत हुए। इस के लिए रेगेक्स का उपयोग करने की कोई वजह नहीं है। –

+1

जबकि php.net पर कोई उदाहरण नहीं है, 'pathinfo' बाहरी यूआरएल के साथ भी काम करता है। तो 'pathinfo (' http://somehost.com/some/path/some.file ')' भी काम करता है। – RaphaelDDL

8

आप स्ट्रिंग के अंतिम भाग को निकालने के लिए देख रहे हैं, तो आप ': मैं एक सरणी है कि इस तरह दिखता है में jquery.ui.min.js विभाजित करने के लिए इसे पाने के लिए कोशिश कर रहा हूँ घ की जरूरत:

\.([^.]*)$ 

आप . या

(\.[^.]*)$ 

नहीं करना चाहते हैं, तो आप ऐसा करेंगे।

+0

बस जो मैं खोज रहा था। फ़ाइल एक्सटेंशन (और उसके बाद के किसी भी पैरामीटर) से पहले फ़ाइल यूआरएल में _small जोड़ने के लिए इसका इस्तेमाल किया जाता है। var prodImg = cartItem.image.replace (/(\.[^.]*)$/, "_small $ 1"); – Carson

4

अंकित मूल्य पर:
या, दो पंक्तियों में बहुत बस इसे करते हैं।

विकल्प 1::

$ext = "jquery.ui.min.css"; 
$ext = array_pop(explode('.',$ext)); 
echo $ext; 

विकल्प 2: यहाँ 2 अलग अलग तरीकों कि स्थिर स्ट्रिंग पार्स के लिए अनुकूलित कार्यों का उपयोग कर रहे हैं

$ext = "jquery.ui.min.css"; 
$ext = pathinfo($ext); 
echo $ext['extension']; 
+0

pathinfo() इस कार्य के लिए सबसे तेज़ कार्य प्रतीत होता है। Regexp ने कार्य करने के लिए समय के 4.5, array_pop 4 और pathinfo() 3 सापेक्ष इकाइयां लीं। – valentinas

0

मैं इस प्रयोग किया जाता है - इसे आजमाइए :

m/\.([^.\\]+)$/ 
0

यहाँ मैं जब अभी पिछले "भाग" के लिए मिलान पिछले डॉट बाहर करने के लिए जो चाहते हैं उसे बताया गया है:

[^\.]([^.]*)$ 
संबंधित मुद्दे