2013-06-10 5 views
22

हैलो भयानक समुदाय,बैश स्क्रिप्ट में नियमित अभिव्यक्ति

जब मैं रेगेक्स की बात करता हूं तो मैं पूरी तरह से डोप हूं। मैंने इसे सीखना बंद कर दिया है .. और अब मेरी आलस्य मेरे साथ पकड़ी गई है।

10_06_13 

अर्थात्: अगर एक स्ट्रिंग इस प्रारूप से मेल खाता
की जांच:

मैं क्या करने की कोशिश कर रहा हूँ। आज की तारीख, या "2digits_2digits_2digits"

मैंने क्या किया गया है के साथ एक समान की तारीख:

regex='([0-9][0-9][_][0-9][0-9][_][0-9][0-9])' 
if [[ "$incoming_string" =~ $regex ]] 
then 
    # Do awesome stuff here 
fi 

यह कुछ हद तक काम करता है। लेकिन जब आने वाली स्ट्रिंग 011_100_131 के बराबर होती है ... यह अभी भी रेगेक्स चेक पास करती है।

यदि कोई मुझे सही दिशा में इंगित करने में मदद कर सकता है तो मैं आभारी रहूंगा।
चीयर्स

+1

ध्यान दें कि अंडरस्कोर को स्क्वायर ब्रैकेट में होने की आवश्यकता नहीं है। '_' वही चीज़ से मेल खाता है जैसे' [_] '। – chepner

+2

011_100_131 आपके रेगेक्स से मेल नहीं खाएगा। 011_10_131 होगा। – hop

उत्तर

35

=~ सफल होता है बाईं पर स्ट्रिंग सही पर regex के लिए एक मैच में शामिल है। आप अगर स्ट्रिंग regex से मेल खाता जानना चाहते हैं, तो आप "लंगर" दोनों पक्षों पर regex, इस तरह की जरूरत है:

regex='^[0-9][0-9][_][0-9][0-9][_][0-9][0-9]$' 
if [[ $incoming_string =~ $regex ]] 
then 
    # Do awesome stuff here 
fi 

^ केवल स्ट्रिंग की शुरुआत में सफल होता है, और $ केवल अंत में सफल होता है।

नोट्स:

  1. मैं [[ ... ]] से अनावश्यक () regex से और "" हटा दिया।
  2. बैश मैनुअल खराब शब्द है, क्योंकि यह कहता है कि स्ट्रिंग मिलान होने पर =~ सफल होता है।
+0

अरे, मैं बहुत करीब था! मैंने अनुमान लगाया '^' अक्षर को बाहर करना था। आपका बहुत बहुत धन्यवाद! :) – Robbie

+7

@ रोबबी: '^' का मतलब है "छोड़कर" जब यह एक चरित्र सेट ('[...] ') में पहली बात है, और इसका मतलब है" पैटर्न "जब यह पैटर्न में पहली बात है। अन्यथा, यह सिर्फ '^' से मेल खाता है (लेकिन यह सभी regex कार्यान्वयन में सच नहीं है; कभी-कभी इसका मतलब है "एक रेखा की शुरुआत से मेल करें")। मैं मानता हूं कि जब तक आप इसका उपयोग नहीं करते हैं तब तक यह भ्रमित होता है। – rici

+0

बढ़िया! बहुत उपयोगी, फिर से धन्यवाद। योग्यता से वोट दिया! उपरोक्त वर्णित – Robbie

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