Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用另一个字符串替换一个字符串,替换后的字符串将使用RegExp包含第一个字符串的参数_Java_Regex_String - Fatal编程技术网

Java 如何用另一个字符串替换一个字符串,替换后的字符串将使用RegExp包含第一个字符串的参数

Java 如何用另一个字符串替换一个字符串,替换后的字符串将使用RegExp包含第一个字符串的参数,java,regex,string,Java,Regex,String,我有一根绳子 String SQL = "SELECT POSITION('Bengal' IN STRING) from delivery"; 我想用这个字符串INSTR(字符串,'Bengal')替换SQL字符串中的POSITION()函数。在SQL字符串“Bengal”的POSITION函数中,字符串不是固定值,它将根据用户需求而更改,但位置,打开大括号“(”,in和closing大括号“)”是静态的。 最终输出必须使用正则表达式如下所示 String SQL ="SELECT INST

我有一根绳子

String SQL = "SELECT POSITION('Bengal' IN STRING) from delivery";
我想用这个字符串INSTR(字符串,'Bengal')替换SQL字符串中的POSITION()函数。在SQL字符串“Bengal”的POSITION函数中,字符串不是固定值,它将根据用户需求而更改,但位置,打开大括号“(”,in和closing大括号“)”是静态的。 最终输出必须使用正则表达式如下所示

String SQL ="SELECT INSTR(STRING,'Bengal') from delivery";
因此,在字符串中,如果它重复两次,那么它必须将两次替换为同一个字符串SQL中的相应参数。
任何帮助都将不胜感激。

在Java中,请使用以下正则表达式:

SQL = SQL.replaceAll("POSITION\\((.*?) IN ([A-Z]+)\\)", "INSTR($2, $1)");
但是,请注意,它仅适用于输入字符串的简单情况,如果第一个参数是某个表达式,第二个参数是更复杂的参数,则它可能不起作用。它甚至可以用于查询中的多个
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。过去我用过。它甚至可以通过嵌套的
POSITION
调用将子选择处理为
POSITION
参数。

我怀疑可能会有嵌套的括号。不,这不会是因为它是一个函数,它不允许嵌套的括号。如果字符串可以包含任何内容(例如),则很难100%正确SQL.:谢谢你的帖子,但是输出与我预期的不同,输出是:选择INSTR(2,1),INSTR(2,1),从交付时开始。但是我希望它像这样选择INSTR(STRINGX,'text'),INSTR(STRINGX,'text'))当我在java代码中直接使用上面的代码时,它工作得很好,但是当我在mysql数据库中添加模式时,它没有给出预期的输出,它给出的输出与我的输入相同。你如何将它放入mysql数据库?您应该使用regexp包,请看这里:。我不是MySQL专家,你的问题被标记为
java