正则表达式只取第一组中括号内容

select * from CH_OPDC_MAIN main where FD_PROCESS_TYPE is null [ and FD_GROUP in (SELECT REGEXP_SUBSTR('{FDGROUP}', '[^;]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR( '{FDGROUP}', '[^;]+', 1, LEVEL) IS NOT NULL) ] [ and FD_WORK_CARD_NUM = '{FDWORKCARDNUM}']

img

希望匹配的结果是:
[ and FD_GROUP in (SELECT REGEXP_SUBSTR('{FDGROUP}', '[^;]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR( '{FDGROUP}', '[^;]+', 1, LEVEL) IS NOT NULL) ]

[ and FD_WORK_CARD_NUM = '{FDWORKCARDNUM}']

参考GPT和自己的思路:

您好,根据您的要求,需要使用正则表达式只取第一组中括号内容,可以使用以下的正则表达式:

/[(.*?)]/

这个正则表达式会匹配最外层的中括号,并且只会取第一组中括号内容。应用到您的问题中,您需要使用这个正则表达式对整个字符串进行匹配,然后只保留第一个匹配结果即可。

示例代码如下:

str = "select * from CH_OPDC_MAIN main where FD_PROCESS_TYPE is null [ and FD_GROUP in (SELECT REGEXP_SUBSTR('{FDGROUP}', '[^;]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR( '{FDGROUP}', '[^;]+', 1, LEVEL) IS NOT NULL) ] [ and FD_WORK_CARD_NUM = '{FDWORKCARDNUM}']";

var re = /[(.*?)]/;
var result = str.match(re);
console.log(result[0]);

执行上面的代码,输出结果应该是:

[ and FD_GROUP in (SELECT REGEXP_SUBSTR('{FDGROUP}', '[^;]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR( '{FDGROUP}', '[^;]+', 1, LEVEL) IS NOT NULL) ]

希望能够帮助您解决问题。

参考GPT和自己的思路:

根据您提供的情况,可以使用以下的正则表达式来匹配所需内容:
[([^[]]+)]
它会匹配中括号内的内容,并将第一组中括号内容提取出来。
因此,应用该正则表达式后,匹配结果如下:
[ and FD_GROUP in (SELECT REGEXP_SUBSTR('{FDGROUP}', '[^;]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR( '{FDGROUP}', '[^;]+', 1, LEVEL) IS NOT NULL) ]
[ and FD_WORK_CARD_NUM = '{FDWORKCARDNUM}']

java的正则不是支持递归的吗?(?R) 试试