2015-12-13 10 views
5

के लिए नियमित अभिव्यक्ति मैं सोच रहा हूं कि एक नियमित अभिव्यक्ति है जिसका उपयोग मैं मूल HTML का उपयोग कर फ़ाइल एक्सटेंशन खोजने के लिए कर सकता हूं।फ़ाइल एक्सटेंशन

अभी मैं

<img src="images/pimage/{$item['item_id']}/small.jpg"> 

है समस्या मेरे सभी छवियों के अंत में .jpg नहीं है।

तो मैं एक नियमित रूप से expresion कि सभी छवियों है कि छोटे के साथ शुरू खोजने के लिए और .jpg, .jpeg, .JPG, .png, .gif, आदि में समाप्त कर सकते हैं चाहते हैं ... दोनों छोटे अक्षर और ऊपरी मामले में।

क्या कोई साधारण रेगेक्स है जो मैं सभी मिलान करने वाली फ़ाइलों को खोजने के लिए "छोटा" रख सकता हूं?

मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं, लेकिन जब मैं किसी भी सुझाव का प्रयास करता हूं, तो आउटपुट केवल रेगेक्स दिखाता है, न कि इच्छित परिणाम। यहां मेरा वर्तमान कोड

 function print_item($item,$link_change){ 
     $acticon= ($item['active']==TREEMAN_ITEM_ACTIVE)? 'active.gif' : 'disabled.gif'; 
     $tmpl_act=($this->section->webmode)? "<td><img src=\"".ADMIN_IMG_PATH."icons/{$acticon}\"></td>" : ""; 
     $tmpl_date=date('Y-m-d H:i',$item['cdate']); 
     $tmpl_added_by=$item['added_by']; 
     $tmpl_modified_by=$item['modified_by']; 
//  $tmpl_date_mod=date('Y-m-d H:i',$item['timestamp']); 
     $tmpl_date_mod=$item['timestamp']; 
     $res=<<<EOT 
<td >{$item['item_id']}</td> 
<td><a href="{$link_change}"</a><img src="/img/ucart/images/pimage/{$item['item_id']}/small.jpg" height="75" width="75"</td> 
<td class="tb" width="50%"><a href="{$link_change}" title="Edit item">{$item['item_name']}</a></td> 
<td>$tmpl_date</td> 
<td>$tmpl_date_mod</td> 
<td>$tmpl_added_by</td> 
<td>$tmpl_modified_by</td> 
$tmpl_act 
EOT; 

कोई विचार है कि मैं क्या गलत कर रहा हूं?

/^small.*\.(jpe?g|gif|png|tiff)$/i

शर्तें समझाया:

+1

स्पष्टीकरण के लिए, क्या आप पूर्ण फ़ाइल पथ प्राप्त करने के लिए फ़ाइल नाम 'small-filename.jpg' या regex को वापस करने का प्रयास कर रहे हैं। 'छवियों/pimage/27/छोटे-filename.jpg'? – femmestem

+0

सभी फ़ाइल नाम छोटे नाम हैं। कुछ छोटे हैं। Jpg, कुछ छोटे। जेपीजी, small.png, small.gif, आदि ... – Robert

उत्तर

2

regex वाले सभी चित्र "छोटे" और किसी भी विस्तार में अंत के साथ शुरू है कि आप सूचीबद्ध किया है पर कब्जा करने के

^ - साथ शुरू होता है

.* - किसी भी चरित्र

से मेल खाता है- एक अवधि से मेल खाता है; \ एक बचने वाला चरित्र है जिसका अर्थ है कि निम्नलिखित वर्ण को शाब्दिक रूप से व्याख्या किया जाना चाहिए, जो आवश्यक है क्योंकि वर्ण ., ?, + इत्यादि का अर्थ अन्यथा regex में है।

(a|b|c) - कोष्ठकों के अंदर निहित कुछ मेल खाता

? (उदाहरण, मैच अगले वर्ण a या b या c है अगर) - प्रतीक पूर्ववर्ती चरित्र शून्य या एक समय (उदाहरण के प्रकट हो सकता है कि, jpe?g मैचों " jpeg "क्योंकि यह एक 'ई', शामिल है और यह भी मेल खाता है" jpg " 'ई' दिखाई देता है क्योंकि उस स्थिति में शून्य बार)

$ - पैटर्न के अंत मिलान किया जा दर्शाता है

/your-regex-pattern/i - केस संवेदी मैचों (बड़े तथा छोटे)

आप, regex में मिलान पैटर्न के बारे में अधिक जानने के इस आसान cheatsheet बाहर की जाँच करना चाहते हैं: http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/

+0

विस्तार से पहले एक के अलावा किसी भी अवधि वाली किसी भी फ़ाइल के लिए विफल रहता है (उदाहरण के लिए, 'small.heart.png' विफल हो जाएगा भले ही यह एक वैध फ़ाइल नाम है)। इसके अलावा, अंत होना चाहिए '(jpg | jpeg | gif | png | tiff) '(ब्रांड्स का उपयोग करके, ब्रैकेट नहीं)। अंत में, यह सुनिश्चित करने के लिए पैटर्न के अंत में '$' निर्दिष्ट करना बुद्धिमान हो सकता है कि सुनिश्चित फ़ाइल एक्सटेंशन के बाद कोई वर्ण नहीं है (उदाहरण के लिए, आपके वर्तमान पैटर्न कुछ के लिए सफल होंगे: 'small.jpg.php' या कुछ भी जो वैध छवि-विस्तार का पालन करता है)। – SpencerD

+0

@SpencerDoak '[]' बनाम '()' को पकड़ने के लिए धन्यवाद। फाइलनाम किनारे के मामलों के लिए, मैं आपसे पूरी तरह से सहमत हूं लेकिन मैंने उन लोगों के लिए जिम्मेदार नहीं ठहराया क्योंकि ओपी ने हमें एक विचार दिया कि फाइलनाम क्या दिखेंगे। – femmestem

+3

एक और बात, 'jpg | jpeg' को' jpe? G' तक छोटा किया जा सकता है – Gary

0

this page from www.Regular-Expressions.info, मामले की संवेदनशीलता और अन्य इसी तरह के matching- के अनुसार झंडे/विकल्प आमतौर पर सीधे पैटर्न में प्रोग्रामिंग भाषा में लागू होते हैं। हालांकि, इस मामले में भाषा मिलान-झंडे/विकल्पों में पास करने का विकल्प प्रदान नहीं करती है, ऊपर दिए गए रेगेक्स जानकारी पृष्ठ का कहना है कि केस-असंवेदनशीलता जैसे विकल्प पैटर्न में निर्दिष्ट किए जा सकते हैं।

केस-असंवेदनशील होने के रूप में एक पैटर्न निर्दिष्ट करने के लिए, आप केस असंवेदनशील भाग के अंत होने के मामले में (?-i) की शुरुआत होने के रूप में (?i) निर्दिष्ट कर सकते हैं।

आपकी विशिष्ट स्थिति के लिए, इसका मतलब है कि निम्नलिखित RegEx पैटर्न प्रभावी हो सकता है: \.(?i)(png|gif|jpg|jpeg|ico|bmp|svg|tiff)(?-i)$ जाहिर है, आप इस फ़ाइल को छवि फ़ाइल प्रकारों को जोड़ने या हटाने के लिए अपनी आवश्यकताओं को संशोधित करना चाहते हैं।

इस पैटर्न में: \. एक शाब्दिक अवधि चरित्र (.) दर्शाता है; (?i) सभी निम्नलिखित भागों के लिए केस-सेंसिटीविटी बंद कर देता है; (png|gif|jpg|jpeg|ico|bmp|svg|tiff) अर्थ फाइल एक्सटेंशन के लिए एक (और केवल एक) सूची में विकल्पों में से होना चाहिए विकल्पों की सूची को दर्शाता है,; (?-i) केस-संवेदनशीलता चालू करता है; और $ स्ट्रिंग के अंत को चिह्नित करता है, जिसका अर्थ है कि फ़ाइल एक्सटेंशन के बाद कोई वर्ण नहीं हो सकता है।

भाषा आप मिलान-झंडे को निर्दिष्ट का समर्थन करता है एक और तरीका है का उपयोग कर रहे, तो मैं तुम्हें उन में जो कुछ भी तरह से भाषा की सिफारिश की निर्दिष्ट करने के लिए सलाह देंगे तो; हालांकि, रेगुलर एक्सप्रेशन से जानकारी पेज मैं ऊपर लिंक के अनुसार, इस (जो, पूरे पैटर्न केस-संवेदी नहीं कर का लाभ मिलता है अगर तुम पैटर्न के लिए और अधिक जोड़ने का निर्णय ) पैटर्न के भीतर उन्हें निर्दिष्ट करने के लिए उचित तरीका है ।

संपादित: एक चेतावनी के रूप, ऐसा लगता है जैसे Javascript चालू और बंद मामले संवेदनशीलता मोड़ पैटर्न ही ((?i) और (?-i) का प्रयोग करके) के भीतर समर्थन नहीं करता। \.([pP][nN][gG]|[jJ][pP][eE]?[gG]|[gG][iI][fF]|[iI][cC][oO]|[tT][iI][fF]{1,2})$: तो, अगर आप जावास्क्रिप्ट के साथ काम कर रहे हैं या तो आप अपने अभिव्यक्ति के अंत में एक ध्वज के रूप में स्थापित करने /i या इस तरह के रूप में निम्नलिखित एक पैटर्न का उपयोग करके कि आस-पास काम करने के लिए होगा। इस पैटर्न में, एक्सटेंशन में प्रत्येक अक्षर ऊपरी और निचले मामले दोनों में निर्दिष्ट है। यह पैटर्न को फ़ाइल एक्सटेंशन से मेल खाने की अनुमति देता है इससे कोई फर्क नहीं पड़ता कि यह किस मामले में लिखा गया है, जबकि बाकी अभिव्यक्ति को केस संवेदनशील होने की अनुमति है।

1

हो सकता है, यह आपकी मदद करेगा?

/\.\w+$/ 

(डॉट संकेत और 1 (या अधिक) इनपुट स्ट्रिंग के अंत में शब्द वर्ग अक्षर)

या

/\.[a-z]+$/i 
/\.[a-zA-Z]+$/ 

(डॉट संकेत और 1 (या अधिक) इनपुट स्ट्रिंग के अंत में अक्षर)

या

/\.[a-z]{1,4}$/i 
/\.[a-zA-Z]{1,4}$/ 

(डॉट संकेत और इनपुट स्ट्रिंग के अंत में 1 से 4 पत्र)

ध्यान दें, कि सभी विकल्प उत्पादन में डॉट संकेत है।
सभी regexps केस-संवेदी के बाद से वहाँ है एक i -flag हैं।


इसके अलावा, दुर्भाग्य से, जावास्क्रिप्ट lookbehind (small.-स्ट्रिंग के बाद 1 या अधिक पत्र) का समर्थन नहीं करता, इसलिए regexp

/(?<=small\.)[a-z]+/i 

काम नहीं करेगा; लेकिन, मुझे लगता है, यह इस मामले में सबसे अच्छा regexp होगा।

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