关于ORACLE的正则表达式问题 我想截取字符串中以2个字母开头,后面是数字的形式中的数字部分,比如aaa123bb23ccc345得到的结果是23,请问regex_substr中正则表达式该怎么写呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同, 但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。 POSIX 正则表达式由标准的元字符(metacharacters)所构成: '^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。 '$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹 配 '\n' 或 '\r'。 '.' 匹配除换行符之外的任何单字符。 '?' 匹配前面的子表达式零次或一次。 '+' 匹配前面的子表达式一次或多次。 '*' 匹配前面的子表达式零次或多次。 '|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的 字符串。 '( )' 标记一个子表达式的开始和结束位置。 '[]' 标记一个中括号表达式。 '{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少 出现m次。 \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。 字符簇: [[:alpha:]] 任何字母。 [[:digit:]] 任何数字。 [[:alnum:]] 任何字母和数字。 [[:space:]] 任何白字符。 [[:upper:]] 任何大写字母。 [[:lower:]] 任何小写字母。 [[:punct:]] 任何标点符号。 [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。 各种操作符的运算优先级 \转义符 (), (?:), (?=), [] 圆括号和方括号 *, +, ?, {n}, {n,}, {n,m} 限定符 ^, $, anymetacharacter 位置和顺序 SELECT SUBSTR(REGEXP_SUBSTR('aaa123bb34444444443ccc345','[^a-zA-Z]{1}\w{2}\d+',1,1),4) FROM DUAL 这是oracle位置查询功能的不全,必须要用substr像在Perl中,可以用(?<=[^A-Za-z]{1}\w{2})\d+反向预查(?<=pattern) 反向匹配,子模式不参与匹配,相当于自定义的位于文本首的边界\b 如果不觉得麻烦,可以用正则表达式做一个嵌套匹配:select regexp_substr(regexp_substr('aaa123bb23ccc345', '[^a-z][a-z]{2}\d+'), '\d+$',1,1,'i') from dual; 以上只是举个例子,其实真正是想实现取正则表达式截取的部分数据这个功能就比如上面的例子,用正则匹配regexp_substr('aaa123bb23ccc345','[^a-z][a-z]{2}\d+')其中只要\d+对应的这部分数据,而前面只做匹配条件,而不要放到截取的结果里看来是蛮难做到的,算了不纠结了 oracle的一个问题,请大虾们帮个忙。 Oracle怎么把多个值显示在一个字段中 帮忙看看这个sql语句 bat执行oracle文件问题 关于编号问题 为什么我定义了如下的触发器却不被触发? 表中数据误删除了,怎么恢复,急!!!!!!! 在windows下用过Pro*c/c++的进来看一下 一个关于创建控制文件的问题?成功马上散分 在vc里面如何用ADO读写BLOB字段,能否给出一段代码,谢谢 ora-00942提示找不到表 新人求助, 这个plsql语句到底错在哪了
但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。
POSIX 正则表达式由标准的元字符(metacharacters)所构成:
'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹
配 '\n' 或 '\r'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的
字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少
出现m次。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。
字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。
各种操作符的运算优先级
\转义符
(), (?:), (?=), [] 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和顺序
这是oracle位置查询功能的不全,必须要用substr像在Perl中,可以用(?<=[^A-Za-z]{1}\w{2})\d+
反向预查
(?<=pattern) 反向匹配,子模式不参与匹配,相当于自定义的位于文本首的边界\b
'[^a-z][a-z]{2}\d+'),
'\d+$',1,1,'i')
from dual;
就比如上面的例子,用正则匹配
regexp_substr('aaa123bb23ccc345','[^a-z][a-z]{2}\d+')
其中只要\d+对应的这部分数据,而前面只做匹配条件,而不要放到截取的结果里
看来是蛮难做到的,算了不纠结了