我有以下正则表达式模式:(?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/