有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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$_]+).*(?!\')

有没有办法只使用一个正则表达式?我应该使用前向/后向还是其他方式


共 (2) 个答案

  1. # 1 楼答案

    你可以简化你的正则表达式。请注意,始终要捕获的组后面跟有,)。意识到这一事实,您将得到以下正则表达式:

    (@[0-9a-zA-Z$_]+)(?=[,)])
    
    • @[0-9a-zA-Z$_]+是你的价值
    • (?=[,)])检查),字符是否在后面

    如果描述字符串不能放在哪里的方法很复杂,那么最好看看它必须放在哪里

    看看它在Regex101是如何工作的

  2. # 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-90到9之间的单个字符
    • +^列表中的单个字符+^按字面意思
    • a-za到z范围内的单个字符(不区分大小写)
    • A-Za到Z范围内的单个字符(不区分大小写)
    • _文字字符_
    • 0-90到9之间的单个字符
    • $_列表中的单个字符$_

    \s*匹配任何空白字符[\r\n\t\f ]

    • 量词:*在零次和无限次之间,尽可能多次,根据需要回馈[贪婪]

    [\),]匹配下表中的单个字符

    • \)按字面意思匹配字符)
    • ,文字字符,