I need to get data from third-occurrence position of “*” to 4th. I do so:
with t as (select 'T*76031*12558*test*received percents' as txt from dual)
select regexp_replace(txt, '.*(.{4})[*][^*].*$', '\1')
from t
I receive “test” – it’s right, but how to get any number of characters, not just 4?
This should work given the example you have used:
So the SELECT would be:
The regex looks for:
Group 1:
start of string. Any number of characters up to a ‘‘. Any further characters up mto another ‘‘. Any further characters up to the third ‘*’.
Group 2:
Any alphanumeric characters
Group 3:
A ‘*’ followed by any other characters up to the end of the string.
Replace all of the above with whatever was found in Group 2.
Hope this helps.
EDIT:
Following on from a great answer from another thread by Rob van Wijk here:
Exracting substring from given string