0

我有这个字符串:

"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"

约德

美元

4

1 回答 1

1

要获得模式的第二次出现,您应该将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生成使用伪列的前 100 个数字LEVEL- 将级别作为出现参数输入REGEXP_SUBSTR - 排除所有无效匹配WHERE MATCH IS NOT NULL - 提取匹配的相关部分SUBSTR

(当然,您也可以使用负前瞻/后视来确保您有正好 3 个字母的组)

于 2015-01-13T09:29:15.020 回答