SQL-REGEX-常见正则表达式的使用

19 篇文章 0 订阅

SQL-REGEX-常见正则表达式的使用

在SQL中,正则表达式(Regex)的使用可以帮助进行更灵活和精确的模式匹配和数据筛选。不同的数据库管理系统对于正则表达式的支持略有差异,但大体都是相似的。
在这里插入图片描述

Tips:

模式描述匹配内容
*Zero or more instances of string preceding it匹配之前字符串的零个或多个实例
+One or more instances of strings preceding it匹配之前字符串的一个或多个实例
.Any single character匹配任何单个字符
?Match zero or one instances of the strings preceding it匹配之前字符串的零个或一个实例
^Beginning of string匹配字符串的开头
$End of string匹配字符串的结尾
[abc]Any character listed between the square brackets匹配方括号内列出的任何字符
[^abc]Any character not listed between the square brackets匹配方括号内未列出的任何字符
[A-Z]match any upper case letter匹配任何大写字母
[a-z]match any lower case letter匹配任何小写字母
[0-9]match any digit from 0 through to 9匹配从 ‘0’ 到 ‘9’ 的任何数字
[[:<:]]matches the beginning of words匹配单词的开头
[[:>:]]matches the end of words匹配单词的结尾
[:class:]matches a character class匹配字符类,例如 [:alpha:] 匹配字母,[:space:] 匹配空白,[:punct:] 匹配标点符号,[:upper:] 匹配大写字母
p1|p2|p3Alternation; matches any of the patterns p1, p2, or p3匹配模式 p1、p2 或 p3 中的任何一个
{n}n instances of preceding element匹配前一个元素的 n 次实例
{m,n}m through n instances of preceding element匹配前一个元素的至少 m 次至多 n 次实例

在这里插入图片描述

Eg:

  1. * (零个或多个实例)
    • 模式: a*
      • 匹配: ``, a, aa, aaa
    • 模式: 12*
      • 匹配: 1, 12, 122, 1222

  1. + (一个或多个实例)
    • 模式: a+
      • 匹配: a, aa, aaa(但不匹配空字符串)
    • 模式: 12+
      • 匹配: 12, 122, 1222(至少包含一个’1’后跟至少一个’2’)

  1. . (任何单个字符)
    • 模式: a.b
      • 匹配: acb, a@b, a1b(其中 . 可以匹配任何字符)
    • 模式: ...
      • 匹配: 123, abc, @#$(任意三个字符的组合)

  1. ? (零个或一个实例)
    • 模式: colou?r
      • 匹配: color, colour(‘u’ 可选)
    • 模式: 10?
      • 匹配: 1, 10(‘0’ 可选)

  1. ^ (字符串的开头)
    • 模式: ^abc
      • 匹配: abc, abcdef(只有在字符串开头是’abc’时匹配)
    • 模式: ^[A-Z]
      • 匹配: A, B, C(只有在字符串开头是大写字母时匹配)

在这里插入图片描述
在这里插入图片描述


  1. $ (字符串的结尾)
    • 模式: xyz$
      • 匹配: xyz, abcxyz(只有在字符串结尾是’xyz’时匹配)
    • 模式: [0-9]$
      • 匹配: 1, 2, 9(只有在字符串结尾是数字时匹配)

在这里插入图片描述

在这里插入图片描述

  1. [abc] (方括号内列出的任何字符)
    • 模式: [aeiou]
      • 匹配: a, e, i, o, u(匹配任何元音字母)
    • 模式: [0-5]
      • 匹配: 0, 1, 2, 3, 4, 5(匹配 0 到 5 的任何数字)

  1. [^abc] (方括号内未列出的任何字符)
    • 模式: [^0-9]
      • 匹配: a, A, @(匹配除了数字以外的任何字符)
    • 模式: [^aeiou]
      • 匹配: b, c, d(匹配除了元音字母以外的任何字母)

  1. [A-Z] (任何大写字母)
    • 模式: [A-F]
      • 匹配: A, B, C, D, E, F(匹配从’A’到’F’的任何大写字母)
    • 模式: [M-Z]
      • 匹配: M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z(匹配从’M’到’Z’的任何大写字母)

  1. [a-z] (任何小写字母)
    • 模式: [a-h]
      • 匹配: a, b, c, d, e, f, g, h(匹配从’a’到’h’的任何小写字母)
    • 模式: [p-z]
      • 匹配: p, q, r, s, t, u, v, w, x, y, z(匹配从’p’到’z’的任何小写字母)

  1. [0-9] (任何数字)
    • 模式: [1-5]
      • 匹配: 1, 2, 3, 4, 5(匹配从’1’到’5’的任何数字)
    • 模式: [7-9]
      • 匹配: 7, 8, 9(匹配从’7’到’9’的任何数字)

  1. [[:<:]] (单词的开头)
    • 模式: [[:<:]]foo
      • 匹配: foobar, foo123(匹配以’foo’开头的单词)
    • 模式: [[:<:]]bar
      • 匹配: bar, barista(匹配以’bar’开头的单词)

  1. [[:>:]] (单词的结尾)
    • 模式: foo[[:>:]]
      • 匹配: endfoo, foo(匹配以’foo’结尾的单词)
    • 模式: bar[[:>:]]
      • 匹配: bar, barista(匹配以’bar’结尾的单词)

  1. [:class:] (字符类)
    • 模式: [[:digit:]]
      • 匹配: 0, 1, 2, …, 9(匹配任何数字)
    • 模式: [[:alpha:]]
      • 匹配: a, B, C, …, Z(匹配任何字母)

  1. p1|p2|p3 (选择)
    • 模式: cat|dog
      • 匹配: cat, dog(匹配’cat’或’dog’)
    • 模式: yes|no|maybe
      • 匹配: yes, no, maybe(匹配’yes’、‘no’或’maybe’)

  1. {n} (前一个元素的 n 次实例)
    • 模式: a{3}
      • 匹配: aaa(匹配三个连续的’a’)
    • 模式: [0-9]{2}
      • 匹配: 12, 34, 56(匹配两位数的数字)

  1. {m,n} (前一个元素的 m 到 n 次实例)
    • 模式: x{2,4}
      • 匹配: xx, xxx, xxxx(匹配两到四个连续的’x’)
    • 模式: [A-Za-z]{5,10}
      • 匹配: abcdef, AbCdEfG, xyzWXYZ123(匹配包含 5 到 10 个字母的字符串)

  • 27
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL Server本身并不直接支持正则表达式的功能。但是可以通过使用CLR(Common Language Runtime)来扩展SQL Server的功能,从而实现正则表达式使用。 以下是一种使用CLR扩展实现正则表达式的方法: 1. 创建一个CLR程序集,其中包含正则表达式的逻辑。可以使用C#或VB.NET编写CLR程序集。 2. 将CLR程序集部署到SQL Server中。 3. 在SQL Server中创建一个存储过程或函数,该存储过程或函数调用CLR程序集中的方法来执行正则表达式匹配。 下面是一个示例,演示如何在SQL Server中使用正则表达式: 1. 创建CLR程序集: ```csharp using System; using System.Data.SqlTypes; using System.Text.RegularExpressions; using Microsoft.SqlServer.Server; public class RegexFunctions { [SqlFunction] public static SqlBoolean RegexMatch(SqlString input, SqlString pattern) { if (input.IsNull || pattern.IsNull) return SqlBoolean.Null; return Regex.IsMatch(input.Value, pattern.Value); } } ``` 2. 将CLR程序集部署到SQL Server中: ```shell CREATE ASSEMBLY RegexFunctions FROM 'C:\Path\To\RegexFunctions.dll' WITH PERMISSION_SET = SAFE; ``` 3. 创建存储过程或函数来调用CLR程序集中的方法: ```sql CREATE FUNCTION dbo.RegexMatch(@input NVARCHAR(MAX), @pattern NVARCHAR(MAX)) RETURNS BIT AS EXTERNAL NAME RegexFunctions.RegexMatch; ``` 现在,你可以在SQL Server中使用`dbo.RegexMatch`函数来执行正则表达式匹配。例如: ```sql SELECT dbo.RegexMatch('/Book/103.aspx', '/book/(\d+).aspx') AS MatchResult; ``` 这将返回一个布尔值,指示输入字符串是否与正则表达式模式匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻师傅

谢谢您!我会继续努力创作!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值