我需要从字符串中提取一些文本,但仅限于文本与字符串模式匹配的位置。字符串模式将包含...
2个数字,正斜杠和6个数字 例如一十二万三千四百五十六分之十二
或
2个数字,正斜杠,6个数字,连字符和2个数字 例如12 / 123456-12
我知道如何使用INSTR查找特定的字符串。是否可以找到与特定模式匹配的字符串?
答案 0 :(得分:1)
您需要使用regexp_like来过滤结果,并使用regexp_substr来获取子字符串。
这大致是它的样子:
select id, myValue, regexp_substr(myValue, '[0-9]{2}/[0-9]{6}') as myRegExMatch
from Foo
where regexp_like(myValue,'^([a-zA-Z0-9 ])*[0-9]{2}/[0-9]{6}([a-zA-Z0-9 ])*$')
带有SQLFiddle的链接,您可以在行动中看到并根据自己的喜好进行调整。
上面示例中提供的regexp_like
考虑了可能绑定数字模式的字母数字和空白字符。
答案 1 :(得分:0)
使用regexp_like
。
where regexp_like(col_name,'\s[0-9]{2}\/[0-9]{6}(-[0-9]{2})?\s')
\s
匹配一个空格。在模式的开头和结尾包括它们。[0-9]{2}\/[0-9]{6}
匹配2个数字,正斜杠和6个数字(-[0-9]{2})?
对于前一个模式后的连字符和2个数字是可选的。答案 2 :(得分:0)
regexp_like(col_name,'^\d{2}/\d{6}($|-\d{2}$)')
或
regexp_like(col_name,'^\d{2}/\d{6}(-\d{2})?$')