我有字符串:
"Y::_~XXXXXX XXXXXX~MIGRATION~_~_~_~_~0~JOD50.000~USD257.43::JOD"
我希望通过 Regex
获取货币列表。
到目前为止,我只能使用此查询获得第一场比赛:
SELECT
REGEXP_SUBSTR('Y::_~XXXXXX XXXXXX~MIGRATION~_~_~_~_~0~JOD50.000~USD257.43::JOD','[a-zA-z]{3}$')
from dual;
你能帮我拿第二场比赛是美元吗?谢谢。 :d
顺便说一下,我打算动态使用 Regex
。
所以给定String的任何输出,我想通过出现得到3长字符串:
"Y::_~XXXXXX XXXXXX~MIGRATION~_~_~_~_~0~JOD50.000~USD257.43::JOD"
JOD
USD
答案 0 :(得分:0)
要获得第二次出现的模式,您应该将occurrence
REGEXP_SUBSTR
参数设置为2:
SELECT REGEXP_SUBSTR('Dummy text 123USD another dummy text 456USD',
'[0-9]{3}USD',
1,
2) from dual
<强>更新强>
要获取由非字母包围的3个字母的所有组,您可以使用此查询:
select match, substr(match, 2, 3) from (
SELECT
REGEXP_SUBSTR('Y::_~XXXXXX XXXXXX~MIGRATION~_~_~_~_~0~JOD50.000~USD257.43::JOD',
'(^|[^a-zA-Z])[a-zA-z]{3}([^a-zA-Z]|$)',
1,
level) as match
from dual
connect by level <= 100
) where match is not null
此
- 匹配所有3个字母组[a-zA-Z] {3}
- 要么发生在字符串^
的开头,要么前面有一个非字母字符[^a-zA-Z]
- and either occur at the end of the string
$ or have a non-letter character afterwards
[^ a-zA-Z]
- 使用CONNECT BY
使用LEVEL
伪列生成前100个数字
- 将级别作为出现参数提供给REGEXP_SUBSTR
- 使用WHERE MATCH IS NOT NULL
排除所有无效匹配
- 使用SUBSTR
(您也可以使用负向前瞻/后视来确保您拥有正好3个字母的组合)