我使用的是Oracle 11gR2。
我试图在'['和']'之间提取文本,包括[]。
例如:
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
答案 0 :(得分:2)
假设您将要出现两次[],那么以下内容就足够了。的?在里面 。*?意味着它不是贪婪的,所以它不会吞噬最后一个]。
select
regexp_replace('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]'
,'.*(\[.*?\]).*(\[.*?\]).*','\1\2')
from dual
;
答案 1 :(得分:1)
我不是Oracle用户,但是通过快速阅读docs,我认为这应该是关闭的:
REGEXP_REPLACE('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]',
'^[^\[]*(\[[^\]]*\])[^\[]*(\[[^\]]*\])$', '\1 \2')
这看起来比它更糟糕。
模式是:
^[^\[]*
捕获所有字符,但不包括第一个[
(\[[^\]]*\])
将[<not "]">]
[^\[]*
捕捉所有内容(坚果不包括)下一个[
(\[[^\]]*\])
在字符串末尾捕获[<not "]">]
之类的任何内容然后更换很简单,只需<grp 1> <grp 2>