REGEXP_SUBSTR:正在提取[](包括[])之间的字符串部分



我使用的是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>

最新更新