我使用的是Oracle 11gR2。
我正在尝试提取"["one_answers"]"之间的文本,包括[]。
例如:
select regexp_substr('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]','[(.*)]') from dual
输出:
[REQ.UID] and username=[REQD.VP.UNAME]
所需输出:
[REQ.UID][REQD.VP.UNAME]
请告诉我如何获得所需的输出。
谢谢&当做Bishal
假设您只需要出现两次[],那么以下内容就足够了。这个在。*?意味着它是非贪婪的,这样它就不会吞噬最后一个]。
select
regexp_replace('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]'
,'.*([.*?]).*([.*?]).*','12')
from dual
;
我不是Oracle用户,但通过快速阅读文档,我认为这应该很接近:
REGEXP_REPLACE('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]',
'^[^[]*([[^]]*])[^[]*([[^]]*])$', '1 2')
这看起来比实际情况更糟糕。
模式为:
^[^[]*
捕获直到(但不包括)第一个[
的所有字符([[^]]*])
捕获到与[<not "]">]
类似的组1中[^[]*
捕获下一个[
之前的所有内容(不包括螺母)([[^]]*])
捕获到组2中,任何类似于[<not "]">]
的内容,位于字符串末尾
那么替换很简单,只需<grp 1> <grp 2>