如何用另一个字符串替换字符串,并且替换的字符串将使用RegExp在其中包含第一个字符串的参数

时间:2016-01-14 08:28:39

标签: java regex string

我有一个字符串

String SQL = "SELECT POSITION('Bengal' IN STRING) from delivery";

我想用这个字符串 INSTR(STRING,' Bengal')替换SQL字符串中的POSITION()函数。并且在SQL String的位置函数中,孟加拉语'和STRING不是一个固定的值,它会根据用户的要求而改变,但POSITION,开括号"(",IN和关闭括号")"是静态的。 使用正则表达式,最终输出必须看起来像这样。

String SQL ="SELECT INSTR(STRING,'Bengal') from delivery";

所以在字符串中,如果它重复两次,那么它必须用相应的参数将两次替换为相同的字符串SQL。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

在Java中,使用此正则表达式:

SQL = SQL.replaceAll("POSITION\\((.*?) IN ([A-Z]+)\\)", "INSTR($2, $1)");

但是,请注意,它仅适用于输入String的简单情况,如果第一个参数是某个表达式,第二个参数更复杂,则可能无效。它甚至可以用于查询中的多个POSITION表达式,例如:

String SQL = "SELECT POSITION('Bengal''s something IN d' IN STRING), POSITION('text' IN STRINGX) from delivery";
SQL = SQL.replaceAll("POSITION\\((.*?) IN ([A-Z]+)\\)", "INSTR($2, $1)");
// SQL now contains: "String SQL = "SELECT INSTR(STRING, 'Bengal''s something IN d'), INSTR(STRINGX, 'text') from delivery";"

如果要完全正确地替换函数调用,请使用正确的sqlparser。在过去,我使用了JSQLParser。它甚至可以使用嵌套POSITION调用来处理POSITION参数的子选择。