正则表达式五

来源:互联网 发布:网络爬虫工具 编辑:程序博客网 时间:2024/05/23 00:05

----===============Oracle正则表达式(regularexpression)=================
/*
在oracle里正则表达式有四个函数可用,分别是regexp_like、regexp_substr、regexp_instr 和regexp_replace。
这里在我们oracle 10g里灵活应用。
先来简单介绍一下正则表达式的内容,正则表达式是做为快速查询的文本内容的,在linux应用比较多,
首先,行的起始与结束 “^”这个字符是表示只查找行首的内容。“$”这个字符只查找行末的内容。
接下来是“^”还可以做为一个排除字符来使用。还是使用例子来做一个演示比较明了一下。
*/

 

最后一个函数regexp_replace
REGEXP_REPLACE 函数是用另外一个值来替代串中的某个值。例如,可以用一个匹配数字来替代字母的每一次出现。
REGEXP_REPLACE的格式如下所示

语法:
REGEXP_REPLACE与REPLACE函数相同,替换原字符串中的字符内容
REGEXP_REPLACE(srcstr, pattern [,replacestr [, position [, occurrence [,match_option]]]])
这个替换函数还是一个非常好用的。

如我们在有一个字符串adfadfa (main) next 现在我们要把()替换成<>,这里我们可能想用replace就可以搞定了,
但是我们现在做的是(之后必须有)这样的()我们才替换把<>.
select regexp_replace('adfadfa (main) next ','(\()([^\)]*)(\))','<\2>') from dual
output: adfadfa <main> next
这里还是一个\做为转义字符。

再来一个ip格式转换的例子吧,我们一般的IP的格式是12.19.168.27现在要不足3位的补足前面为0,结果是012.019.168.027
select regexp_replace(
regexp_replace('12.19.168.27','([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})',
'00\1.00\2.00\3.00\4') ,
'([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}$)','\2\4\6\8')
from dual
output: 012.019.168.027
这里我分成两步来操作,regexp_replace('12.19.168.27','([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3}).([0-9]{1,3})',
'00\1.00\2.00\3.00\4')我首先让每个小字符串做添加0,这样每个字符串都会大于3,再
'([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}\.)([0-9]*)([0-9]{3}$)','\2\4\6\8')
这整个字符串分成8段,这样我们只要2、4、6、8这四个段就可以了。

下面一个例子中,在每两个字符之间插入一个空格符
SELECT regexp_replace('YAHOO', '(.)', '\1 ') AS output FROM dual;
Output: Y A H O O
这个用一个循环的方式去操作,还蛮好的。

select regexp_replace(
regexp_replace('12.19.168.27','([^.]+)','00\1') ,'([^.]*)([^.]{3})','\2')
from dual
接着刚才那个,我们可以把replace循环替换的方式来操作。

0 0
原创粉丝点击