自定义查询语言的正则表达式日期格式Java

时间:2014-09-17 05:07:02

标签: java regex

我的日期格式如下。

  • 日期[2014_09_01,2014_09_01]
  • 日期2014_04_01
  • last_nn_days nn =天数

示例:

  • 从someTable t中选择*,其中t.name不为null 日期[2014_09_01,2014_09_15]
  • 从someTable t中选择*,其中t.name不为null 日期2014_09_01
  • 从someTable t中选择*,其中t.name不为null 日期last_30_days

由此:我想用

生成一个新查询
  • 从someTable t中选择*,其中t.name不为null 日期[%s,%s]
  • 从someTable t中选择*,其中t.name不为null 日期[%s,%s]
  • 从someTable t中选择*,其中t.name不为null 日期[%s,%s]

我想搜索这些字符串,并希望用日期[%s,%s]替换此部分。 可以用Java中的Regex吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用以下正则表达式替换[%s,%s]

中提到的所有字符串
(dates)\\s*(?:\\[\\d{4}_\\d{2}_\\d{2},\\d{4}_\\d{2}_\\d{2}\\]|\\d{4}_\\d{2}_\\d{2}|last_\\d{2}_days)

替换字符串:

$1 [%s,%s]

DEMO

String s = "select * from someTable t where t.name is not null and dates[2014_09_01,2014_09_15]\n" + 
            "select * from someTable t where t.name is not null and dates 2014_09_01\n" + 
            "select * from someTable t where t.name is not null and dates last_30_days\n";
System.out.println(s.replaceAll("(dates)\\s*(?:(?:\\[\\d{4}_\\d{2}_\\d{2},)?\\d{4}_\\d{2}_\\d{2}\\]?|last_\\d{2}_days)", "$1 [%s,%s]"));

<强>输出:

select * from someTable t where t.name is not null and dates [%s,%s]
select * from someTable t where t.name is not null and dates [%s,%s]
select * from someTable t where t.name is not null and dates [%s,%s]