设为首页 收藏本站
查看: 1017|回复: 0

[经验分享] SQL 基础正则表达式(二十三)

[复制链接]

尚未签到

发表于 2018-10-20 12:08:11 | 显示全部楼层 |阅读模式
  在SQL 和 PL/SQL 中使用正则表达式
函数名称描述REGEXP_LIKE与LIKE运算符类似,但执行正则表达式匹配,而不是简单的模糊匹配(条件)REGEXP_REPLACE以正则表达式搜索和替换字符串REGEXP_INSTR以正则表达式搜索字符串,并返回匹配的位置REGEXP_SUBSTR以正则表达式搜索和提取匹配字符串REGEXP_COUNT返回匹配的次数  什么是元字符?
  元字符是特殊字符有特殊的含义,如一个通配符,重复字符,一个不匹配的字符,一个范围内的符。
  您可以使用多个预定义的元字符符号的模式匹配。
  例如, ^(f|ht)tps?:$ 正则表达式搜索字符串从以下开始:
  – 字面值 f 或 ht
  – 字面值 t
  – 字面值 p,字面值s 可选
  – 冒号“:” 结尾的字面值
  正则表达式的元字符
语法描述.Matches any character in the supported character set, except NULL+Matches one or more occurrences?Matches zero or one occurrence*Matches zero or more occurrences of the preceding subexpression{m}Matches exactly m occurrences of the preceding expression{m, }Matches at least m occurrences of the preceding subexpression{m,n}Matches at least m, but not more than n, occurrences of the preceding  subexpression
[…]Matches any single character in the list within the brackets|Matches one of the>subexpression can be a string of literals or a complex expression containing  operators.
^Matches the beginning of a string$Matches the end of a string\Treats the subsequent metacharacter in the expression as a literal\nMatches the nth (1–9) preceding subexpression of whatever is grouped  within parentheses. The parentheses cause an expression to be
  remembered; a backreference refers to it.
\dA digit character[:class:]Matches any character belonging to the specified POSIX character>  REGEXP_LIKE (source_char, pattern [,match_option]
  REGEXP_INSTR (source_char, pattern [, position
  [, occurrence [, return_option
  [, match_option [, subexpr]]]]])
  REGEXP_SUBSTR (source_char, pattern [, position
  [, occurrence [, match_option
  [, subexpr]]]])
  REGEXP_REPLACE(source_char, pattern [,replacestr
  [, position [, occurrence
  [, match_option]]]])
  REGEXP_COUNT (source_char, pattern [, position
  [, occurrence [, match_option]]])
  使用REGEXP_LIKE 执行基本搜索
  REGEXP_LIKE(source_char, pattern [, match_parameter ])
  SELECT first_name, last_name FROM employees
  WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');
  使用REGEXP_REPLACE 替换
  REGEXP_REPLACE(source_char, pattern [,replacestr
  [, position [, occurrence [, match_option]]]])
  SELECT REGEXP_REPLACE(phone_number, '\.','-') AS phone
  FROM employees;
  使用 REGEXP_INSTR 插入
  REGEXP_INSTR (source_char, pattern [, position [,
  occurrence [, return_option [, match_option]]]])
  SELECT street_address,REGEXP_INSTR(street_address,'[[:alpha:]]') AS
  First_Alpha_Position
  FROM locations;
  使用 REGEXP_SUBSTR 函数提取字符串
  REGEXP_SUBSTR (source_char, pattern [, position [, occurrence [, match_option]]])
  SELECT REGEXP_SUBSTR(street_address , ' [^ ]+ ') AS Road FROM locations;
  子表达式
DSC0000.jpg

  使用子表达式与正则表达式支持
  SELECT
  REGEXP_INSTR
  ('0123456789', -- source char or search value
  '(123)(4(56)(78))', -- regular expression patterns
  1, -- position to start searching
  1, -- occurrence
  0, -- return option
  'i', -- match option (case insensitive)
  1) -- sub-expression on which to search
  "Position"
  FROM dual;
  为什么要访问第n个子表达式
  一个更实际的用途:DNA测序
  您可能需要找到一个特定的子模式,确定了在小鼠DNA免疫
  所需的蛋白质。
  SELECT REGEXP_INSTR(' ccacctttccctccactcctcacgttctcacctgtaaagcgtccctc
  cctcatccccatgcccccttaccctgcagggtagagtaggctagaaaccagagagctccaagc
  tccatctgtggagaggtgccatccttgggctgcagagagaggagaatttgccccaaagctgcc
  tgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagttttca
  ccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagag
  gctcttgggtctgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggc
  atgtaggggcgtggggatgcgctctgctctgctctcctctcctgaacccctgaaccctctggc
  taccccagagcacttagagccag ',
  '(gtc(tcac)(aaag))',
  1, 1, 0, 'i',
  1) "Position"
  FROM dual;
  REGEXP_SUBSTR 示例
  SELECT
  REGEXP_SUBSTR
  ('acgctgcactgca', -- source char or search value
  'acg(.*)gca', -- regular expression pattern
  1, -- position to start searching
  1, -- occurrence
  'i', -- match option (case insensitive)
  1) -- sub-expression
  "Value"
  FROM dual;
  使用 REGEXP_COUNT函数
  REGEXP_COUNT (source_char, pattern [, position
  [, occurrence [, match_option]]])
  SELECT REGEXP_COUNT(
  'ccacctttccctccactcctcacgttctcacctgtaaagcgtccctccctcatccccatgcccccttaccctgcag
  ggtagagtaggctagaaaccagagagctccaagctccatctgtggagaggtgccatccttgggctgcagagagaggag
  aatttgccccaaagctgcctgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagtt
  ttcaccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagaggctcttgggtc
  tgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggcatgtaggggcgtggggatgcgctctg
  ctctgctctcctctcctgaacccctgaaccctctggctaccccagagcacttagagccag' ,
  'gtc') AS Count
  FROM dual;
  Check约束和正则表达式:示例
  ALTER TABLE emp8
  ADD CONSTRAINT email_addr
  CHECK(REGEXP_LIKE(email,'@')) NOVALIDATE;
DSC0001.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624047-1-1.html 上篇帖子: SQL 基础之使用子查询检索数据(二十二) 下篇帖子: SQL 和 NoSQL 的区别
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表