我正在编写一个解析器来处理一些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的问题,这里是解析OracleLOAD 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*$