使用正则表达式处理__场景

时间:2013-11-05 10:40:17

标签: regex oracle plsql oracle11g

我有像

这样的数据
BR_TheDailyBeast.com__ROS_BN_DT_ROS Leaderboard_SUB_728x90
BR_CNET_ROS_BN_DT_Cnet reviewsAddedValueMid-pageMPU_SUB_300x250

O / P#BN和BN

实际O / P#ROS和BN

我需要提取第3和第4下划线。当我使用'[^_]+',1,4时,它正在正确提取,但在__这样的数据中,它处理单个下划线。

我应该如何处理这些案例以及解析逻辑。

请在此建议我。

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以使用它。

regexp_substr(your_string, '_([^_]*)', 1, 3, null, 1)

您也可以简单地使用普通的substr和instr函数。

substr(your_string, 
       instr(your_string,'_',1,3) + 1,
       instr(your_string,'_',1,4) - instr(your_string,'_',1,3) - 1
      )

答案 1 :(得分:0)

您可以尝试此解决方案:

SELECT
  regexp_substr('BR_TheDailyBeast.com__ROS_BN_DT_ROS Leaderboard_SUB_728x90', '_+([^_]*)', 1, 3, NULL, 1) AS val1,
  regexp_substr('BR_CNET_ROS_BN_DT_Cnet reviewsAddedValueMid-pageMPU_SUB_300x250', '_+([^_]*)', 1, 3, NULL, 1) AS val2
FROM dual;

输出:

VAL1 VAL2
---- ----
BN   BN