【问题标题】:Issues with a simple SQL Regex一个简单的 SQL 正则表达式的问题
【发布时间】:2016-12-11 13:00:17
【问题描述】:

我有一个任务将列从 SQL 语句中拆分出来。这对我来说很有效,在“,”上进行了简单的 Java 拆分。但是现在我在列内有额外的逗号问题。 我想这个问题的答案很简单,但我不会想到。

例子:

来源:

"Col_A BIGINT , COL_B TIMESTAMP , COL_C DECIMAL(10,30) , COL_D VARCHAR(20)"

我想要的输出:

Array[0] = Col_A BIGINT
Array[1] = COL_B TIMESTAMP
Array[2] = COL_C DECIMAL(10,30)
Array[3] = COL_D VARCHAR(20)

真实的(和明显的)输出:

Array[0] = Col_A BIGINT
Array[1] = COL_B TIMESTAMP
Array[2] = COL_C DECIMAL(10
Array[3] = 30)
Array[4] = COL_D VARCHAR(20)

明显的问题是两位小数之间的逗号 (COL_C)。

现在我问你是否有一个很好的解决方案来解决这个问题。我真的很想使用单个拆分来接收不同的列。但是如何避免在十进制描述中出现错误的拆分。

我希望你们能理解我的问题。英语不是我的母语。

【问题讨论】:

  • ,split(" , ") 周围有空格。否则,请使用split("\\s*,\\s*(?![^)]*\\))")(这是一种解决方法,稍后会因某些输入而失败,最好是使用 matching 方法)。
  • 你能给出你用于这个输出的代码吗?
  • 空间对我来说太明显了。我的原始语句是由 DB2-Look 创建的。空间应该每次都在那里。我试试看,谢谢回复

标签: java sql regex


【解决方案1】:

您只需使用正则表达式拆分给定的字符串:,(?!\d)

找到后面没有数字的,

代码示例:

System.out.println(Arrays.toString("Col_A BIGINT , COL_B TIMESTAMP , COL_C DECIMAL(10,30) , COL_D VARCHAR(20)".split(",(?!\\d)")));

Demo and Explaination of regex

【讨论】:

  • 但是,这仍然匹配括号内的逗号。
  • 是的。但根据 OP 括号,数字总是列的大小。
猜你喜欢
  • 2016-10-11
  • 1970-01-01
  • 2011-05-13
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多