我使用Gradle来解析一个有" GO"的SQL文件。 (或" go")分离命令。 JDBC驱动程序并不喜欢" go"所以我使用" go"来解析文件。作为分隔符。我正在使用
multiLineString.replaceAll("(?i)\ngo\n","\nGO\n").split("\nGO\n")
虽然这不区分大小写,但它并不考虑前导或尾随空格(有时是空格,有时是制表符)。如果某人在" go"之前或之后有空格(或制表符),则replaceAll不会抓住它。
我希望使用正则表达式基本上说,"如果一行中唯一的非空白字符是' go',则将该行更改为' \ nGO \ ñ'所以我可以分开它#34;我认为这会奏效,但它没有:
multiLineString.replaceAll (/\n\s+go\s+\n/, "\nGO\n").split("\nGO\n")
multiLineString可以包含如下文本:
drop procedure if exists dbo.procname
go
create procedure dbo.procname as
begin
....
...我想要一个带有两个字符串的数组:
[0] drop procedure if exists dbo.procname
[1] create procedure dbo.procname as\nbegin\n ...
即使" go"我也需要相同的数组。被前导,尾随空格或标签包围。
答案 0 :(得分:1)
您可以直接与
分开multiLineString.split("(?i)\n[\\p{Zs}\t]*go[\\p{Zs}\t]*\n")
<强>详情:
(?i)
- 内联Pattern.CASE_INSENSITIVE
修饰符版本\n
- 换行符[\\p{Zs}\t]*
- 零个或多个水平空格go
- 单词go
[\\p{Zs}\t]*
- 零个或多个水平空格\n
- 换行符此外,如果您希望水平空格只是常规空格或标签,则可以将[\\p{Zs}\t]*
替换为[ \t]*
。