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

时间:2013-12-04 16:40:07

标签: java regex

我有以下正则表达式模式:(?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):catch delimiter“go”

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

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

1 个答案:

答案 0 :(得分:1)

如果您使用正则表达式分裂字符串,一种可能的解决方案可能是使用正则表达式来检查@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之类的东西可以起作用。