【发布时间】:2016-10-15 07:28:42
【问题描述】:
我是 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 中的“(?=...)”之类的东西
如能提供图案或相关功能,不胜感激。
【问题讨论】: