鱼果果 發表於 2025-5-17 14:44:17

SQL中的字符串正则表达式常见示例代码

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">正则表达式的基本概念</a></li><li><a href="#_label1">正则表达式的基础字符</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">元字符</a></li><li><a href="#_lab2_1_1">转义字符</a></li></ul><li><a href="#_label2">常见的正则示例</a></li><ul class="second_class_ul"></ul><li><a href="#_label3">SQL中应用正则表达式</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_2">字符串查找</a></li><li><a href="#_lab2_3_3">字符串替换</a></li><li><a href="#_lab2_3_4">常见案例</a></li></ul><li><a href="#_label4">总结&nbsp;</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>正则表达式的基本概念</h2>
<p>所谓正则表达式(Regular Expression,简称<code>regex</code>或<code>regexp</code>)是一种用于匹配字符串中字符组合的模式描述工具。它通过一系列特殊的字符和符号来定义一种约定俗成的规则,用于查找、匹配、替换或验证字符串中的特定内容。在表单提交验证、路由映射、文本处理等方面大放异彩,基本上所有编程语言都有特定的一套正则机制以供程序员使用。</p>
<p class="maodian"><a name="_label1"></a></p><h2>正则表达式的基础字符</h2>
<p>正则表达式由普通字符和特殊符号组成,一共可以分为两种大类。首先是<strong>元字符</strong>,由特殊符号组成,代表的是正则匹配中的匹配准则。<strong>转义字符</strong>通常由特殊符号<code>\</code>+字符组成,是某种字符表达类型的统称,当匹配内容中本身带有<code>\</code>时,需要再添加一个转义,例如<code>\\</code>。</p>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>元字符</h3>
<ul><li><code>.</code>:匹配任意<strong>一个</strong>字符(除了换行符)。</li><li><code>*</code>:匹配<strong>零次或多次</strong>的字符或子模式。</li><li><code>+</code>:匹配<strong>一次或多次</strong>的字符或子模式。</li><li><code>?</code>:匹配<strong>零次或一次</strong>的字符或子模式。</li><li><code>{n}</code>:匹配<strong>重复n次</strong>的字符或子模式。</li><li><code>{n,}</code>:匹配<strong>重复&ge;n次</strong>的字符或子模式。</li><li><code>{n,m}</code>:匹配<strong>重复n到m次</strong>的字符或子模式。</li><li><code>[]</code>:匹配方括号内的任意<strong>一个</strong>字符。</li><li><code>[^]</code>:匹配<strong>不</strong>在方括号内的任意<strong>一个</strong>字符。</li><li><code>^</code>:表示匹配字符串以&hellip;开头。</li><li><code>$</code>:表示匹配字符串以&hellip;结尾。</li><li><code>()</code>:分组,用于拆解匹配的内容。</li><li><code>|</code>:逻辑或,表示匹配多种模式中的任意一个。</li><li><code>-</code>:当其不在<code>[]</code>内则就代表字符<code>-</code>,在<code>[]</code>内表示范围,例如<code></code>表示任意小写字符。</li></ul>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>转义字符</h3>
<ul><li><code>\d</code>:匹配任意<strong>数字</strong>字符(0-9)。</li><li><code>\w</code>:匹配任意<strong>字母或数字或下划线</strong>字符(等价于&nbsp;<code></code>)。</li><li><code>\s</code>:匹配任意<strong>空白</strong>字符(空格、制表符、换行符等)。</li><li><code>\b</code>:匹配单词的开始与结束,例如<code>\bword\b</code>可以匹配字符串中的整个单词<code>word</code>,而不会混淆其他包含<code>word</code>的内容。</li><li><code>\D</code>:匹配任意<strong>非数字</strong>字符。</li><li><code>\W</code>:匹配任意<strong>非字母、数字、下划线</strong>字符(等价于&nbsp;<code>[^a-zA-Z0-9_]</code>)。</li><li><code>\S</code>:匹配任意<strong>非空白</strong>字符。</li></ul>
<p class="maodian"><a name="_label2"></a></p><h2>常见的正则示例</h2>
<ul><li>匹配电子邮件地址</li></ul>
<div class="jb51code"><pre class="brush:sql;">\b+@+\.{2,}\b
</pre></div>
<p>解释:匹配以字母、数字、点号、下划线等开头(可出现一次或多次),后跟<code>@</code>,再跟转义的<code>.</code>,最后以域名和顶级域名(字母且至少有两个字符)结尾。</p>
<ul><li>匹配日期</li></ul>
<div class="jb51code"><pre class="brush:sql;">\d{4}-\d{2}-\d{2}
</pre></div>
<p>解释:YYYY-MM-DD,匹配四个数字,跟<code>-</code>,后跟两个数字,再跟<code>-</code>,最后又是两个数字。</p>
<ul><li>匹配手机号码</li></ul>
<div class="jb51code"><pre class="brush:sql;">^1\d{9}$
</pre></div>
<p>解释:以<code>1</code>开头,第二位是<code>3</code>到<code>9</code>之间的数字,后面跟着九位数字结尾。</p>
<ul><li>匹配网页元素</li></ul>
<div class="jb51code"><pre class="brush:sql;">&lt;[^&gt;]+&gt;(.*)&lt;/[^&gt;]+&gt;
</pre></div>
<p>解释:&lt;xxx&gt;&hellip;&lt;/xxx&gt;。</p>
<p class="maodian"><a name="_label3"></a></p><h2>SQL中应用正则表达式</h2>
<p class="maodian"><a name="_lab2_3_2"></a></p><h3>字符串查找</h3>
<p>在SQL中若要应用正则表达式完成字符串查找功能,筛选出满足条件的记录时:</p>
<div class="jb51code"><pre class="brush:sql;">SELECT *
FROM 表名
WHERE 字符串字段 REGEXP '正则表达式';
</pre></div>
<p>注意:仅字符串字段支持使用<code>REGEXP</code>+正则语句进行查找功能。</p>
<p class="maodian"><a name="_lab2_3_3"></a></p><h3>字符串替换</h3>
<p>在SQL中若要应用正则表达式完成字符串替换功能时:</p>
<div class="jb51code"><pre class="brush:sql;">SELECT regexp_replace(str, pattern, replace_str, occurrence)
FROM 表名;
</pre></div>
<p>其中:</p>
<ul><li><code>str</code>:表示需要应用正则替换的字符串表达;</li><li><code>pattern</code>:表示正则表达式,需要带上英文引号;</li><li><code>replace_str</code>:表示当匹配到样式后需要将其替换的新字符串表达;</li><li><code>occurrence</code>:取值为整型常量,表示替换的程度,该值取0时替换掉所有满足正则条件的匹配子串,大于0时表示将第几个满足正则条件的匹配子串替换。</li></ul>
<p class="maodian"><a name="_lab2_3_4"></a></p><h3>常见案例</h3>
<p>例题:&nbsp;<a href="https://leetcode.cn/problems/find-users-with-valid-e-mails/?envType=study-plan-v2&envId=sql-free-50" rel="external nofollow" target="_blank">查找有效邮箱的用户</a></p>
<p>一个有效的电子邮件具有前缀名称和域,其中:</p>
<ul><li>前缀名称是一个字符串,可以包含字母(大写或小写),数字,下划线&nbsp;<code>_</code>,点&nbsp;<code>.</code>&nbsp;和<code>/</code>或破折号<code>-</code>&nbsp;;</li><li>前缀名称必须以字母开头;</li><li>域名称为<code>@leetcode.com</code>&nbsp;。</li></ul>
<p>代码:</p>
<div class="jb51code"><pre class="brush:sql;">SELECT user_id, name, mail
FROM Users
WHERE mail REGEXP '^*\\@leetcode\\.com$';</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>总结&nbsp;</h2>
頁: [1]
查看完整版本: SQL中的字符串正则表达式常见示例代码