java正则表达式Lookahead和Lookahead解析SQL语句
我试图用正则表达式解析SQL语句,并保存其参数以供以后使用
假设我有以下SQL语句:
INSERT INTO tablename (id, name, email) VALUES (@id, @name, @email)
以下正则表达式可以正常工作:
(@[0-9a-zA-Z$_]+)
但是,在此语句中,我应该忽略“”或“”中的所有内容,只保存第一个参数:
UPDATE mytable SET id = @id, name = 'myname@id' WHERE id = 1;
根据这个答案https://stackoverflow.com/a/307957“在一个正则表达式中执行它是不实际的”,但我仍在尝试这样做
我尝试添加Regex Lookahead和Lookahead,但不起作用:
(?<!\').*(@[0-9a-zA-Z$_]+).*(?!\')
有没有办法只使用一个正则表达式?我应该使用前向/后向还是其他方式
# 1 楼答案
你可以简化你的正则表达式。请注意,始终要捕获的组后面跟有
,
或)
。意识到这一事实,您将得到以下正则表达式:@[0-9a-zA-Z$_]+
是你的价值(?=[,)])
检查)
或,
字符是否在后面李>如果描述字符串不能放在哪里的方法很复杂,那么最好看看它必须放在哪里
看看它在Regex101是如何工作的
# 2 楼答案
您可以使用:
[\=\(\s]\s*\@[0-9+^a-zA-Z_0-9$_]+\s*[\),]
说明:
[\=\(\s]
匹配下表中的单个字符\=
与字符=字面匹配\(
与字符匹配(字面意思)\s
匹配任何空白字符[\r\n\t\f ]
\s*
匹配任何空白字符[\r\n\t\f ]
量词:
*
在零次和无限次之间,尽可能多次,根据需要回馈[贪婪]\@
按字面意思匹配字符@
[0-9+^a-zA-Z_0-9$_]+
匹配下表中的单个字符量词:
+
在一次和无限次之间,尽可能多的次数,根据需要回馈[贪婪]0-9
0到9之间的单个字符+^
列表中的单个字符+^
按字面意思a-z
a到z范围内的单个字符(不区分大小写)A-Z
a到Z范围内的单个字符(不区分大小写)_
文字字符_
0-9
0到9之间的单个字符$_
列表中的单个字符$_
\s*
匹配任何空白字符[\r\n\t\f ]
*
在零次和无限次之间,尽可能多次,根据需要回馈[贪婪][\),]
匹配下表中的单个字符\)
按字面意思匹配字符)
,
文字字符,