我是 Lua 的“LPeg”和“re”模块的新手,目前我想根据以下规则编写一个模式:
- 匹配以“gv_$/gv$/v$/v_$/x$/xv$/dba_/all_/cdb_”开头的字符串和前缀“SYS.%s*”或“PUBLIC.%s*”是可选的
- 字符串不应跟随字母数字,即模式与“XSYS.DBA_OBJECTS”不匹配,因为它跟随“X”
- 该模式不区分大小写
例如,以下字符串应与模式匹配:
,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"))
我的问题是:
- 如何实现不区分大小写的匹配?有一些关于解决方案的主题,但我太新了,无法理解
- 如何只返回匹配的字符串,而不是还必须加上 %W?Java中的“(?= ...)”之类的东西
如果您能提供模式或相关功能,我们将不胜感激。