gpt4 book ai didi

java - 查找分隔符并忽略引号内的分隔符

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:55 24 4
gpt4 key购买 nike

我有以下正则表达式模式:(?iu)[(?=\s)]\bgo\b(?!\S)

它正在按分隔符 go 进行分割,基本上它捕获整个世界并忽略 #go--go 等特殊字符,因此它不考虑这些分隔符。

我现在需要忽略注释中的分隔符,例如:select 'something go Something' from table1 go --

它应该只找到一个分隔符并返回 select 'something go Something' from table 1--。任何帮助将不胜感激,谢谢。

--...更新上面的问题:

@randomducks,感谢您的提示,到目前为止我可以测试该解决方案工作正常。

现在我有以下模式:

(?=(([^']+'){2})*[^']*$)(?iu)[(?=\s)]\bgo\b(?!\S)|^go|go$

(?=(([^']+'){2})*[^']*$) :忽略引用文本内的分隔符

(?iu)[(?=\s)]\bgo\b(?!\S) :捕获分隔符“go”

|^go|go$ :还捕获字符串/行分隔符的开头和结尾。

知道我需要的只是忽略注释内的分隔符,例如/* go */。我尝试调整上面的模式来做到这一点,但是到目前为止还没有运气。

最佳答案

如果您无法使用正则表达式拆分字符串,一种可能的解决方案可能是使用正则表达式检查偶数个引号,如@anubhava 此处所述:https://stackoverflow.com/a/10864960/2788862

对于你的问题,解决方案是

(?=(([^']+'){2})*[^']*$)(?iu)[(?=\s)]\bgo\b(?!\S)

You can see a working example of this here

更新:

如果不需要,您可能需要考虑删除多行注释,然后使用正则表达式分离出 SQL 语句。查看此处了解更多信息:http://ostermiller.org/findcomment.html

如果您确实希望包含多行注释,则正则表达式可能不是最好的解决方案。也许手动解析字符串会更适合您的需求。虽然我从未使用过它,但我怀疑类似 antlr3 的东西可以工作。

关于java - 查找分隔符并忽略引号内的分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20380968/

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