我需要标记许多字符串 - 示例如下所示。
NAME:ALAN GREYINTACC:999ACCOUNT:12345678SORT:654321REF:ABC 7654321
我可以使用INSTR
和SUBSTR
的组合来执行此操作,但我希望可以使用REGEXP_SUBSTR
更轻松地执行此操作。
我查看了锚点,但只能找到启动字符串^
和结束字符串$
的引用。
是否存在'in string'锚点?例如如果我想要此字符串中的帐号,我想要ACCOUNT:
之后和SORT:
之前的所有内容
任何回复都表示赞赏,
非常感谢
答案 0 :(得分:2)
使用REGEXP_REPLACE
代替此目的。这可以帮助您从匹配中捕获组(如\1
)并将其替换使用。见下面的例子:
SELECT
REGEXP_REPLACE('NAME:ALAN GREYINTACC:999ACCOUNT:12345678SORT:654321REF:ABC 7654321',
'.*ACCOUNT:(.+?)SORT.*',
'\1') "SOME_VALUE"
FROM DUAL;
答案 1 :(得分:0)
每个说法都没有'in string'锚:你的正则表达式可以匹配模式。即使是'锚'也非常适合行尾和行首。
例如,此正则表达式将匹配ACCOUNT:
后跟任何内容,然后匹配SORT:
并将此“任何内容”存储在第一个捕获组中(在正则表达式中用括号表示)
ACCOUNT:(.*?)SORT:
.
是任何字符(换行符除外)*
是量词,意味着0次或更多次?
使量词处于延迟状态(将在最短的匹配时停止,如果您的数据为ACCOUNT:123SORT:456SORT:789
并且您只想选择123
,而不是123SORT:456
)< / LI>