2014-09-07 34 views

cevap

2

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.

+0

'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. –

İlgili konular