Dosya yolu joker karakteri için dilbilgisi basit bir normal ifadeye indirgenebileceği için sorunuzu anlamış değilim. Bu dilbilgisi Unix Shell tarafından tanımlanmıştır.
Burada Bash için BNF bulabilirsiniz: http://my.safaribooksonline.com/book/operating-systems-and-server-administration/unix/1565923472/syntax/lbs.appd.div.3 Python programlama dilinde
, glob.glob()
fonksiyonun tanım belgelerinde mevcuttur. Bu işlev, desen eşleştirmeyi gerçekleştirmek için fnmatch.fnmatch()
işlevini kullanın. Belgelere buradan ulaşabilirsiniz: https://docs.python.org/2/library/fnmatch.html#fnmatch.fnmatch.
fnmatch.fnmatch
işlevi aşağıdaki gibi, klasik bir düzenli ifade için dosya yolu joker desen çevirmek: Eğer de BNF dilbilgisi yazmak için yardımcı olabilir
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)'
...
DÜZENLEME
İşte çok basit bir dilbilgisi:
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
Ünlü ANTLR aracı tarafından ayrıştırılan popüler dilbilgisinin bir listesi burada bulunabilir: http://www.antlr3.org/grammar/list.html.
'dosya yolu joker karakteri için dilbilgisi basit bir normal ifadeye indirgenebilir, aslında evet. Deseni, yol ile eşleştirebilecek başka bir normal ifadeye dönüştürmek için düzenli ifade yazma yolu vardır. Ancak bu çözüm, desende hata işleme eksik. Ayrıca kendi lehçemde zengin dilbilgisi uygulamasına ihtiyacım var. –