我想询问是否有可能在正则表达式中识别给定数字中是否有3个实例。
例如:
123456141414
123456171717
在上面的例子中我们有3x14和3x17所以它应该返回regexp_like查询中的数字。
但它应该返回所有出现的相同数字的3倍。
答案 0 :(得分:1)
请试试这个:
SELECT INPUT_TEXT, REGEXP_SUBSTR(INPUT_TEXT, '([[:digit:]]{2})\1\1', 6) EXTRACTED
FROM MY_TABLE
WHERE REGEXP_INSTR(INPUT_TEXT, '([[:digit:]]{2})\1\1', 6) > 0
输入表格值:
INPUT_TEXT
--------------
123456141414
123456171717
123456111111
141414123456
123456121234
查询结果:
INPUT_TEXT EXTRACTED
-------------- --------------
123456111111 111111
123456141414 141414
123456171717 171717
答案 1 :(得分:0)
如果我正确地阅读了您的更新要求,您将检查您是否有六位数,然后是一对重复三次的数字。在这种情况下,Reza的回复应修改为:
select * from (
select '123456343434' str from dual union all
select '123456555555' str from dual union all
select '1234565555550' str from dual union all
select '123456232324' str from dual union all
select '123456111110' str from dual )
where regexp_like(str,'^([[:digit:]]{6})([[:digit:]]{2})\2\2$')
给出:
STR
123456343434
123456555555
编辑添加 - 如果你想提取重复的实际数字对:
select regexp_replace(str,'^([[:digit:]]{6})([[:digit:]]{2})\2\2$','\2') result
from (
select '123456343434' str from dual union all
select '123456555555' str from dual union all
select '123456555555a' str from dual union all
select '123456232324' str from dual union all
select '123456111110' str from dual )
where regexp_like(str,'^([[:digit:]]{6})([[:digit:]]{2})\2\2$')