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

标签 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) :捕获分隔符“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/

相关文章:

regex - 如何在Excel中使用正则表达式查找和替换

java - 使用ajax请求发送时json值返回null

java - java聊天客户端程序有没有办法动态查找主机服务器?

java - 在 Spring 中向客户端发送字段元数据

java - spring 事务超时可配置

c# - 拆分一串数字和字符

python - 正则表达式:查找以 * 或? 结尾的字符串

java - Android计算器应用程序阻止相邻的运算符(operator)输入

带有一些验证的企业名称的 JavaScript 正则表达式

c++ - 使用 sed 从 C++ 代码中删除异常规范