मुझे आपके प्रश्न को समझना निश्चित नहीं है क्योंकि फ़ाइल पथ वाइल्डकार्ड के व्याकरण को एक साधारण नियमित अभिव्यक्ति में कम किया जा सकता है। यह व्याकरण यूनिक्स शैल द्वारा परिभाषित किया गया है।
आप बैश यहाँ BNF पा सकते हैं: http://my.safaribooksonline.com/book/operating-systems-and-server-administration/unix/1565923472/syntax/lbs.appd.div.3
अजगर प्रोग्रामिंग भाषा में, glob.glob()
समारोह की एक परिभाषा दस्तावेज में उपलब्ध है। यह फ़ंक्शन पैटर्न मिलान करने के लिए fnmatch.fnmatch()
फ़ंक्शन का उपयोग करता है। दस्तावेज यहां उपलब्ध है: https://docs.python.org/2/library/fnmatch.html#fnmatch.fnmatch।
fnmatch.fnmatch
समारोह एक क्लासिक नियमित अभिव्यक्ति के लिए एक फ़ाइल पथ वाइल्डकार्ड पैटर्न का अनुवाद, इस तरह:
def translate(pat):
"""Translate a shell PATTERN to a regular expression.
There is no way to quote meta-characters.
"""
i, n = 0, len(pat)
res = ''
while i < n:
c = pat[i]
i = i+1
if c == '*':
res = res + '.*'
elif c == '?':
res = res + '.'
elif c == '[':
j = i
if j < n and pat[j] == '!':
j = j+1
if j < n and pat[j] == ']':
j = j+1
while j < n and pat[j] != ']':
j = j+1
if j >= n:
res = res + '\\['
else:
stuff = pat[i:j].replace('\\','\\\\')
i = j+1
if stuff[0] == '!':
stuff = '^' + stuff[1:]
elif stuff[0] == '^':
stuff = '\\' + stuff
res = '%s[%s]' % (res, stuff)
else:
res = res + re.escape(c)
return res + '\Z(?ms)'
कि मदद कर सकते हैं डे BNF व्याकरण लिखने के लिए ...
संपादित
यहां एक बहुत ही सरल व्याकरण है:
wildcard : expr
| expr wildcard
expr : WORD
| ASTERIX
| QUESTION
| neg_bracket_expr
| pos_bracket_expr
pos_bracket_expr : LBRACKET WORD RBRACKET
neg_bracket_expr : LBRACKET EXCLAMATION WORD RBRACKET
प्रसिद्ध एएनटीएलआर उपकरण द्वारा पार्स किए गए लोकप्रिय व्याकरण की एक सूची यहां उपलब्ध है: http://www.antlr3.org/grammar/list.html।
स्रोत
2014-09-19 20:25:02
'फ़ाइल पथ वाइल्डकार्ड के लिए व्याकरण को एक साधारण नियमित अभिव्यक्ति' में कम किया जा सकता है, वास्तव में हां। पैटर्न को दूसरे नियमित अभिव्यक्ति में बदलने के लिए नियमित अभिव्यक्ति लिखने का तरीका है जो पथ से मेल खा सकता है। लेकिन इस समाधान में पैटर्न में त्रुटि प्रबंधन की कमी है। इसके अलावा मुझे अपनी खुद की बोली बनाने के लिए समृद्ध व्याकरण क्रियान्वयन की आवश्यकता है। –