oracle SQL 正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle SQL 正则表达式相关的知识,希望对你有一定的参考价值。
亲,怎么匹配出中括号的内容,用逗号隔开
例如:1+[abc123]+3+([bcd456]*5/100+max([asde_20]))
需要匹配出: abc123,bcd456,asde_20
请参考
select REGEXP_REPLACE('1+[abc123]+3+([bcd456]*5/100+max([asde_20]))','([*+])','\1') from dual;
您可以使用最新引进的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函数来发挥正规表达式的作用。您将体会到这个新的功能如何对 LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函数进行了补充。实际上,它们类似于已有的操作符,但现在增加了强大的模式匹配功能。被搜索的数据可以是简单的字符串或是存储在数据库字符列中的大量文本。正规表达式让您能够以一种您以前从未想过的方式来搜索、替换和验证数据,并提供高度的灵活性。
正规表达式的基本例子
在使用这个新功能之前,您需要了解一些元字符的含义。句号 (.) 匹配一个正规表达式中的任意字符(除了换行符)。例如,正规表达式 a.b 匹配的字符串中首先包含字母 a,接着是其它任意单个字符(除了换行符),再接着是字母 b。字符串 axb、xaybx 和 abba 都与之匹配,因为在字符串中隐藏了这种模式。如果您想要精确地匹配以 a 开头和以 b 结尾的一条三个字母的字符串,则您必须对正规表达式进行定位。脱字符号 (^) 元字符指示一行的开始,而美元符号 ($) 指示一行的结尾(参见表1:附表见第4页)。因此, 正规表达式 ^a.b$ 匹配字符串 aab、abb 或 axb。将这种方式与 LIKE 操作符提供的类似的模式匹配 a_b 相比较,其中 (_) 是单字符通配符。
默认情况下,一个正规表达式中的一个单独的字符或字符列表只匹配一次。为了指示在一个正规表达式中多次出现的一个字符,您可以使用一个量词,它也被称为重复操作符。.如果您想要得到从字母 a 开始并以字母 b 结束的匹配模式,则您的正规表达式看起来像这样:^a.*b$。* 元字符重复前面的元字符 (.) 指示的匹配零次、一次或更多次。LIKE 操作符的等价的模式是 a%b,其中用百分号 (%) 来指示任意字符出现零次、一次或多次。
表 2 给出了重复操作符的完整列表。注意它包含了特殊的重复选项,它们实现了比现有的 LIKE 通配符更大的灵活性。如果您用圆括号括住一个表达式,这将有效地创建一个可以重复一定次数的子表达式。例如,正规表达式 b(an)*a 匹配 ba、bana、banana、yourbananasplit 等。仅供参考!追问
主要就是正则不会写。。。
select REGEXP_REPLACE('1+[123]+3+([456]*5/100)','(\[\d+\])*([^\[\]])*','\2') from dual;
例如这个 你能给匹配出 123 456来吗?
你百度一下,或者问专家
哈哈
参考技术A 正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,php,C#,Java等开发环境。本文主要介绍了关于Oracle中正则表达式的使用方法,下面话不多说了,来一起看看详细的介绍。
Oracle使用正则表达式离不开这4个函数:regexp_like、regexp_substr、regexp_instr、regexp_replace。
1、regexp_like
该函数只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配
2、regexp_substr
该函数和 substr 类似,用于拾取合符正则表达式描述的字符子串
3、regexp_instr
该函数和 instr 类似,用于标定符合正则表达式的字符子串的开始位置
4、regexp_replace
该函数和 replace 类似,用于替换符合正则表达式的字符串 参考技术B 您可以使用最新引进的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函数来发挥正规表达式的作用。您将体会到这个新的功能如何对 LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函数进行了补充。实际上,它们类似于已有的操作符,但现在增加了强大的模式匹配功能。被搜索的数据可以是简单的字符串或是存储在数据库字符列中的大量文本。正规表达式让您能够以一种您以前从未想过的方式来搜索、替换和验证数据,并提供高度的灵活性。冯吃樱桃好结果哈哈哈大热天的人 参考技术C >GetdocumentElement() ; //所有子节点 MSXML2::IXMLDOMNodeListPtr pNodes ; pNodes = pRoot->GetchildNodes() ; int personNumber = pNodes->Getlength() ; MSXML2::IXMLDOMNodePtr pNode ;//根节点下的节点 MSXML2::IXMLDOMNodePtr pNodeAtt ;//根节点下所有节点的所有属性 MSXML2::IXMLDOMNamedNodeMapPtr pNamedNodeMap ; for(int i=0;iGetitem(i) ; pNamedNodeMap = pNode->Getattributes() ; pNodeAtt = pNamedNodeMap->Getitem(type) ; //判断是否有节点的某个属性是否与所找的数据相同,如果有,则删除该节点 if((CString)(pNodeAtt->GetnodeTypedValue().bstrVal) == person) HRESULT hr = pRoot->removeChild(pNode) ; if(FAILED(hr))追问
看不明白,你这是oracle 代码吗?
以上是关于oracle SQL 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
在 oracle 中使用正则表达式查找 POBOX - PL/SQL