我正在为一些 Oracle 命令编写解析器,例如
LOAD DATA
INFILE /DD/DATEN
TRUNCATE
PRESERVE BLANKS
INTO TABLE aaa.bbb
( some parameters... )
我已经创建了一个正则表达式来匹配整个命令。我现在正在寻找一种方法来捕获输入文件的名称(例如这里的“/DD/DATEN”)。我的问题是使用以下正则表达式只会返回第一组的最后一个字符(“N”)。
^\s*LOAD DATA\s*INFILE\s*(\w|\\|/)+\s*$
有任何想法吗?提前谢谢了
编辑:在@HamZa 的问题之后,这里将是解析Oracle LOAD DATA INFILE 命令的整个正则表达式 (虽然简化了):
^\s*LOAD DATA\s*INFILE\s*((?:\w|\\|/)+)\s*((?:TRUNCATE|PRESERVE BLANKS)\s*){0,2}\s*INTO TABLE\s*((?:\w|\.)+)\s*\(\s*((\w+)\s*POSITION\s*\(\s*\d+\s*\:\s*\d+\s*\)\s*((DATE\s*\(\s*(\d+)\s*\)\s*\"YYYY-MM-DD\")|(INTEGER EXTERNAL)|(CHAR\s*\(\s*(\d+)\s*\)))\s*\,{0,1}\s*)+\)\s*$