1

Lua の「LPeg」および「re」モジュールは初めてです。現在、次のルールに基づいてパターンを記述したいと考えています。

  1. 「gv_$/gv$/v$/v_$/x$/xv$/dba_/all_/cdb_」で始まる文字列と、接頭辞「SYS.%s*」または「PUBLIC.%s*」に一致します。オプションです
  2. 文字列は英数字に続くべきではありません。つまり、パターンは「X」に続くため、「XSYS.DBA_OBJECTS」と一致しません。
  3. パターンは大文字と小文字を区別しません

たとえば、以下の文字列はパターンに一致する必要があります。

,sys.dba_objects,       --should return  "sys.dba_objects"    
SyS.Dba_OBJECTS
cdb_objects
dba_hist_snapshot)      --should return  "dba_hist_snapshot"   

現在、私のパターンは以下にあり、大文字の英数字以外の文字列にのみ一致します。

p=re.compile[[
         pattern <- %W {owner* name}
         owner   <- 'SYS.'/ 'PUBLIC.'
         name    <- {prefix %a%a (%w/"_"/"$"/"#")+}
         prefix  <- "GV_$"/"GV$"/"V_$"/"V$"/"DBA_"/"ALL_"/"CDB_"
      ]]
print(p:match(",SYS.DBA_OBJECTS")) 

私の質問は次のとおりです。

  1. 大文字と小文字を区別しない一致を実現するには? 解決策についていくつかのトピックがありますが、私は理解するには新しすぎます
  2. %Wを追加するのではなく、一致した文字列のみを正確に返す方法は? Javaの「(?=...)」のようなもの

パターンまたは関連する機能を提供していただければ幸いです。

4

2 に答える 2