REGEXP_SUBSTR 获得第二场比赛
REGEXP_SUBSTR get second match
我有这个 字符串 :
"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-length String :
"Y::_~XXXXXX XXXXXX~MIGRATION~_~_~_~_~0~JOD50.000~USD257.43::JOD"
JOD
USD
要让您的模式第二次出现,您应该将 REGEXP_SUBSTR
的 occurrence
参数设置为 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 个字母的组)
我有这个 字符串 :
"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-length String :"Y::_~XXXXXX XXXXXX~MIGRATION~_~_~_~_~0~JOD50.000~USD257.43::JOD"
JOD
USD
要让您的模式第二次出现,您应该将 REGEXP_SUBSTR
的 occurrence
参数设置为 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 个字母的组)