我想使用REGEXP_SUBSTR在Oracle中捕获两个特定字符串之间的字符串,它在regex101中工作,但当我在Oracle中使用它时,它不工作。有人能帮忙吗?Pattern: ^Q-.*[\S\s]*?^X-.*
Data:
A-bbbbbb;cccccc;ggggggg
Addrffjfjfjffj
Fjfjfjf
B-rjfjfjffjfj;fjfjffj;tkgkfck
Q-fjfjfjfj;fkfkffkj;gkfkfk
Djfjfjjfjffjfjfj
Fjfjfjfjf
X-fjfjfjf;fjfnfjf;af
Z-fjfjfjfjfjfjfj;gkgjfjcnf;gkgjgk
https://regex101.com/r/Df9RU6/1
Result/Captured:
Q-fjfjfjfj;fkfkffkj;gkfkfk
Djfjfjjfjffjfjfj
Fjfjfjfjf
X-fjfjfjf;fjfnfjf;af
1条答案
按热度按时间wi3ka0sx1#
Oracle不支持在字符列表(如
[\s\S]
)中使用类似Perl的表达式。如果你想使用类似的东西,那么使用POSIX字符类:然而,你似乎想要的是:
其中,对于样本数据:
输出:
| 匹配|
| --|
| Q-fjfjfjfj;fkfkffkj; Gkfkfk杰菲菲菲X-fjfjfjf;fjfnfjf; af|
但是,正则表达式很慢。即使它更多的是类型,使用简单的字符串函数可能会更高效:
也有相同的输出。
如果你想为每一行得到多个结果,那么使用递归查询:
或者,使用简单(更快)的字符串函数:
其中,对于样本数据:
两个输出:
| ID|匹配|
| --|--|
| 1 |Q-fjfjfjfj;公司简介杰菲菲菲X-fjfjfjf;fjfnfjf; af|
| 2 |Q-fjfjfjfj;公司简介X-jfjfjfjffjfjfj|
| 2 |Q-jfjfjf X-fjfjfjf;fjfnfjf; af|
fiddle