gpt4 book ai didi

java - 正则表达式 Lookahead 和 Lookbehind 解析 SQL 语句

转载 作者:行者123 更新时间:2023-12-01 09:30:02 25 4
gpt4 key购买 nike

我正在尝试使用正则表达式解析 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 和 Lookbehind,但它不起作用:

(?<!\').*(@[0-9a-zA-Z$_]+).*(?!\')

有没有办法只使用一个正则表达式来做到这一点?我应该使用前瞻/后瞻还是其他方式?

最佳答案

您可以使用:[\=\(\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 ]

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

[\),] 匹配下面列表中出现的单个字符

  • \) 与字符 ) 字面匹配
  • , 文字字符 ,

关于java - 正则表达式 Lookahead 和 Lookbehind 解析 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39511681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com