Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1973786
  • 博文数量: 424
  • 博客积分: 1291
  • 博客等级: 中尉
  • 技术积分: 2682
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-13 01:34
个人简介

linux oracle 网络安全 编程

文章分类

全部博文(424)

文章存档

2016年(22)

2015年(53)

2014年(57)

2013年(242)

2012年(50)

分类: Oracle

2013-04-13 14:24:49

Sql代码 复制代码 收藏代码
  1. Oracle使用正则表达式离不开这4个函数: 
  2.  
  3. 1。regexp_like 
  4.  
  5. 2。regexp_substr 
  6.  
  7. 3。regexp_instr 
  8.  
  9. 4。regexp_replace 
  10.  
  11. 看函数名称大概就能猜到有什么用了。 
  12.  
  13. regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,语法很简单: 
  14.  
  15.  
  16.  
  17. regexp_substr 函数,和 substr 类似,用于拾取合符正则表达式描述的字符子串,语法如下: 
  18.  
  19.  
  20.  
  21. regexp_instr 函数,和 instr 类似,用于标定符合正则表达式的字符子串的开始位置,语法如下:
  22.  
  23.  
  24.  
  25. regexp_replace 函数,和 replace 类似,用于替换符合正则表达式的字符串,语法如下: 
  26.  
  27.  
  28.  
  29. 这里解析一下几个参数的含义: 
  30.  
  31. 1。source_char,输入的字符串,可以是列名或者字符串常量、变量。 
  32.  
  33. 2。pattern,正则表达式。 
  34.  
  35. 3。match_parameter,匹配选项。 
  36.  
  37. 取值范围: i:大小写不敏感; c:大小写敏感;n:点号 . 不匹配换行符号;m:多行模式;x:扩展模式,忽略正则表达式中的空白字符。 
  38.  
  39. 4。position,标识从第几个字符开始正则表达式匹配。 
  40.  
  41. 5。occurrence,标识第几个匹配组。 
  42.  
  43. 6。replace_string,替换的字符串。 


Sql代码 复制代码 收藏代码
  1. oracle 10g正则表达式 REGEXP_LIKE 用法 
  2. /* 
  3. ORACLE中的支持正则表达式的函数主要有下面四个: 
  4. 1,REGEXP_LIKE :与LIKE的功能相似 
  5. 2,REGEXP_INSTR :与INSTR的功能相似 
  6. 3,REGEXP_SUBSTR :与SUBSTR的功能相似 
  7. 4,REGEXP_REPLACE :与REPLACE的功能相似 
  8. 它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同, 
  9. 但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。 
  10. POSIX 正则表达式由标准的元字符(metacharacters)所构成: 
  11. '^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。 
  12. '$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹 
  13. '\n''\r'。 
  14. '.' 匹配除换行符之外的任何单字符。 
  15. '?' 匹配前面的子表达式零次或一次。 
  16. '+' 匹配前面的子表达式一次或多次。 
  17. '*' 匹配前面的子表达式零次或多次。 
  18. '|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的 
  19. 字符串。 
  20. '( )' 标记一个子表达式的开始和结束位置。 
  21. '[]' 标记一个中括号表达式。 
  22. '{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少 
  23. 出现m次。 
  24. \num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。 
  25. 字符簇:  
  26. [[:alpha:]] 任何字母。 
  27. [[:digit:]] 任何数字。 
  28. [[:alnum:]] 任何字母和数字。 
  29. [[:space:]] 任何白字符。 
  30. [[:upper:]] 任何大写字母。 
  31. [[:lower:]] 任何小写字母。 
  32. [[:punct:]] 任何标点符号。 
  33. [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。 
  34. 各种操作符的运算优先级 
  35. \转义符 
  36. (), (?:), (?=), [] 圆括号和方括号 
  37. *, +, ?, {n}, {n,}, {n,m} 限定符 
  38. ^, $, anymetacharacter 位置和顺序 
  39. |  
  40. */ 


 



Sql代码 复制代码 收藏代码
  1. tbs@TICKET> create table fzq 
  2.   2  ( 
  3.   3  id varchar(4), 
  4.   4  value varchar(10) 
  5.   5  ); 
  6.  
  7. 表已创建。 
  8.  
  9. tbs@TICKET> --数据插入 
  10. tbs@TICKET> insert into fzq values 
  11.   2  ('1','1234560'); 
  12.  
  13. 已创建 1 行。 
  14.  
  15. tbs@TICKET> insert into fzq values 
  16.   2  ('2','1234560'); 
  17.  
  18. 已创建 1 行。 
  19.  
  20. tbs@TICKET> insert into fzq values 
  21.   2  ('3','1b3b560'); 
  22.  
  23. 已创建 1 行。 
  24.  
  25. tbs@TICKET> insert into fzq values 
  26.   2  ('4','abc'); 
  27.  
  28. 已创建 1 行。 
  29.  
  30. tbs@TICKET> insert into fzq values 
  31.   2  ('5','abcde'); 
  32.  
  33. 已创建 1 行。 
  34.  
  35. tbs@TICKET> insert into fzq values 
  36.   2  ('6','ADREasx'); 
  37.  
  38. 已创建 1 行。 
  39.  
  40. tbs@TICKET> insert into fzq values 
  41.   2  ('7','123 45'); 
  42.  
  43. 已创建 1 行。 
  44.  
  45. tbs@TICKET> insert into fzq values 
  46.   2  ('8','adc de'); 
  47.  
  48. 已创建 1 行。 
  49.  
  50. tbs@TICKET> insert into fzq values 
  51.   2  ('9','adc,.de'); 
  52.  
  53. 已创建 1 行。 
  54.  
  55. tbs@TICKET> insert into fzq values 
  56.   2  ('10','1B'); 
  57.  
  58. 已创建 1 行。 
  59.  
  60. tbs@TICKET> insert into fzq values 
  61.   2  ('10','abcbvbnb'); 
  62.  
  63. 已创建 1 行。 
  64.  
  65. tbs@TICKET> insert into fzq values 
  66.   2  ('11','11114560'); 
  67.  
  68. 已创建 1 行。 
  69.  
  70. tbs@TICKET> insert into fzq values 
  71.   2  ('11','11124560'); 
  72.  
  73. 已创建 1 行。 
  74.  
  75. tbs@TICKET> commit
  76.  
  77. 提交完成。 
  78.  
  79. tbs@TICKET> select * from fzq where value like '1____60'
  80.  
  81. ID   VALUE 
  82. ---- ---------- 
  83. 1    1234560 
  84. 2    1234560 
  85. 3    1b3b560 
  86.  
  87. tbs@TICKET> select * from fzq where regexp_like(value,'1....60'); 
  88.  
  89. ID   VALUE 
  90. ---- ---------- 
  91. 1    1234560 
  92. 2    1234560 
  93. 3    1b3b560 
  94. 11   11114560 
  95. 11   11124560 
  96.  
  97. tbs@TICKET> select * from fzq where regexp_like(value,'1[0-9]{4}60'); 
  98.  
  99. ID   VALUE 
  100. ---- ---------- 
  101. 1    1234560 
  102. 2    1234560 
  103. 11   11114560 
  104. 11   11124560 
  105.  
  106. tbs@TICKET> select * from fzq where regexp_like(value,'1[[:digit:]]{4}60'); 
  107.  
  108. ID   VALUE 
  109. ---- ---------- 
  110. 1    1234560 
  111. 2    1234560 
  112. 11   11114560 
  113. 11   11124560 
  114.  
  115. tbs@TICKET> select * from fzq where not regexp_like(value,'^[[:digit:]]+$'); 
  116.  
  117. ID   VALUE 
  118. ---- ---------- 
  119. 3    1b3b560 
  120. 4    abc 
  121. 5    abcde 
  122. 6    ADREasx 
  123. 7    123 45 
  124. 8    adc de 
  125. 9    adc,.de 
  126. 10   1B 
  127. 10   abcbvbnb 
  128.  
  129. 已选择9行。 
  130.  
  131. tbs@TICKET> -- 查询value中不是纯数字的记录 
  132. tbs@TICKET> select * from fzq where not regexp_like(value,'^[[:digit:]]+$'); 
  133.  
  134. ID   VALUE 
  135. ---- ---------- 
  136. 3    1b3b560 
  137. 4    abc 
  138. 5    abcde 
  139. 6    ADREasx 
  140. 7    123 45 
  141. 8    adc de 
  142. 9    adc,.de 
  143. 10   1B 
  144. 10   abcbvbnb 
  145.  
  146. 已选择9行。 
  147.  
  148. tbs@TICKET> -- 查询value中不包含任何数字的记录。 
  149. tbs@TICKET> select * from fzq where regexp_like(value,'^[^[:digit:]]+$'); 
  150.  
  151. ID   VALUE 
  152. ---- ---------- 
  153. 4    abc 
  154. 5    abcde 
  155. 6    ADREasx 
  156. 8    adc de 
  157. 9    adc,.de 
  158. 10   abcbvbnb 
  159.  
  160. 已选择6行。 
  161.  
  162. tbs@TICKET> --查询以12或者1b开头的记录.不区分大小写。 
  163. tbs@TICKET> select * from fzq where regexp_like(value,'^1[2b]','i'); 
  164.  
  165. ID   VALUE 
  166. ---- ---------- 
  167. 1    1234560 
  168. 2    1234560 
  169. 3    1b3b560 
  170. 7    123 45 
  171. 10   1B 
  172.  
  173. tbs@TICKET> --查询以12或者1b开头的记录.区分大小写。 
  174. tbs@TICKET> select * from fzq where regexp_like(value,'^1[2B]'); 
  175.  
  176. ID   VALUE 
  177. ---- ---------- 
  178. 1    1234560 
  179. 2    1234560 
  180. 7    123 45 
  181. 10   1B 
  182.  
  183. tbs@TICKET> -- 查询数据中包含空白的记录。 
  184. tbs@TICKET> select * from fzq where regexp_like(value,'[[:space:]]'); 
  185.  
  186. ID   VALUE 
  187. ---- ---------- 
  188. 7    123 45 
  189. 8    adc de 
  190.  
  191. tbs@TICKET> --查询所有包含小写字母或者数字的记录。 
  192. tbs@TICKET> select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$'); 
  193.  
  194. ID   VALUE 
  195. ---- ---------- 
  196. 1    1234560 
  197. 2    1234560 
  198. 4    abc 
  199. 5    abcde 
  200. 10   abcbvbnb 
  201. 11   11114560 
  202. 11   11124560 
  203.  
  204. 已选择7行。 
  205.  
  206. tbs@TICKET> --查询任何包含标点符号的记录。 
  207. tbs@TICKET> select * from fzq where regexp_like(value,'[[:punct:]]'); 
  208.  
  209. ID   VALUE 
  210. ---- ---------- 
  211. 9    adc,.de 
  212.  
  213. tbs@TICKET>  
  214. tbs@TICKET> select * from dual where regexp_like('b', '^[abc]$'); 
  215.  
  216.  
  217. tbs@TICKET>  
  218. tbs@TICKET> select * from dual where regexp_like('abc', '^[abc]$'); 
  219.  
  220. 未选定行 
  221.  
  222. tbs@TICKET>  
  223. tbs@TICKET> select * from dual where regexp_like('abc', '^a[abc]c$'); 
  224.  
  225.  
  226. tbs@TICKET>  
  227. tbs@TICKET> spool off
阅读(1038) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~