正则表达式与SQL数据库教程

使用正则表达式通过用例查询 Postgres 数据库:

正则表达式(又名 Regex)

  • 正则表达式是一个强大的工具,广泛用于模式匹配和文本操作。

  • 几乎所有编程语言都支持它们,并且经常用于文本提取、搜索和匹配文本等用例。

  • 正则表达式匹配以"^"字符开头,以"$"字符结尾。

例子

  • 假设我们要验证给定的字符串是否是有效的 Visa 信用卡号。

  • 输入字符串为"4111111111111111"。

  • 我们的正则表达式为:"40--9{12}(?:0--9{3})?" 40--9{12}:正则表达式的这一部分基本上表示该模式以 4 开头,后跟包含 (0--9) 的 12 个数字。现在总共有 13 位数字。(?:0--9{3}):旧的 Visa 卡有 13 位数字,因此这代表可选的 3 位数字。

现在基础知识已经清楚了,让我们讨论如何使用正则表达式进行数据库查询。

正则表达式与数据库

  • 使用正则表达式可以使 SQL 查询动态化并提高性能。

  • 在本文中,我们将使用支持正则表达式的 Postgres 数据库。

我们需要记住,并非所有数据库都支持正则表达式。

Postgres

  • 我们可以使用 ~(TILDE) 运算符和 .*(通配符运算符)来实现 PostgreSQL 中的正则表达式。

列表

~:用于匹配正则表达式的字符串,区分大小写

搜索所有符合模式的电子邮件

postgres=# select email from accounts where email ~ '^\S+@\S+\.\S+$';

  1. !~:用于字符串,不匹配正则表达式,区分大小写。

搜索所有与模式不匹配的电子邮件

postgres=# select email from accounts where email !~ '^\S+@\S+\.\S+$';

  1. ~*:用于字符串匹配正则表达式,不区分大小写。

s以不区分大小写的方式搜索与模式匹配的所有电子邮件

postgres=# select email from accounts where email !~ '^\S+@\S+\.\S+$';

  1. !~*:用于不匹配正则表达式的字符串,不区分大小写。

搜索所有与模式不匹配的邮件,不区分大小写

postgres=# select email from accounts where email !~ '^\S+@\S+\.\S+$';

用例:通过品牌名称查找信用卡

  • 我们的输入表是credit_card,其中包含卡号和到期日期。

表中记录:

postgres=# select * from credit_card;

id | card_number | expiry_date | customer_id

----+------------------+-------------+-------------

11 | 2344323432112222 | 2023-04-10 | 10

10 | 2344323432112422 | 2023-04-12 | 10

13 | 4111111111111111 | 2023-04-11 | 10

14 | 4111111131111111 | 2023-05-11 | 10

15 | 4111111131119111 | 2023-05-12 | 10

17 | 378282246310005 | 2023-05-09 | 10

18 | 378282246710005 | 2024-05-09 | 10

21 | 4111111131119 | 2025-05-12 | 10

(8 rows)

查询Visa信用卡

postgres=# select * from credit_card where card_number ~ '^40-9{12}(?:0-9{3})?$';

  • Visa信用卡均以4开头,旧卡为13位,新卡为16位。
  • 我们的查询返回预期的 4 张以 4 开头的卡片。

美国运通:

postgres=# select * from credit_card where card_number ~ '^3470-9{13}$';

  • 所有Amex信用卡均以3开头,第二位数字为4或7。总数字为15。
  • 我们的查询返回预期的 3 个结果。

用例:查找所有与 emailId 模式不匹配的电子邮件

在正则表达式中,我们正在寻找characters@characters.character(例如abc@gmail.com)模式。

我们正在过滤所有不符合模式的电子邮件的查询。

select email from accounts where email !~ '^\S+@\S+\.\S+$';

我们的输出包含不具有上述定义模式的电子邮件。

postgres=# select email from accounts where email !~ '^\S+@\S+\.\S+$';

email


abctest.com

(1 row)

https://www.jdon.com/70336.html

相关推荐
百度一下吧24 分钟前
umi后台管理项目实战:从工程搭建到生产构建
java·前端·javascript
haerapi25 分钟前
仓库拣货路线不只靠最短边:S 形启发式的反例记录
android·开发语言·javascript
事圆则缓40 分钟前
Flutter 状态管理框架对比(六):同一个购物车,四种方案怎么落地?
前端·javascript·flutter
500841 小时前
React Native for OpenHarmony 实战:三方库 react-native-torch 的鸿蒙化适配指南
javascript·react native·react.js·harmonyos
500842 小时前
React Native for OpenHarmony 实战:三方库 react-native-device-uptime 的鸿蒙化适配指南
javascript·分布式·react native·react.js·harmonyos
admin and root10 小时前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
wengad12 小时前
从 wangEditor 迁到 wangEditor-next
前端·javascript·vue.js
行者-全栈开发13 小时前
【前端/JS框架】CVE-2026-3854:GitHub Enterprise Server X-Stat注入XSS漏洞深度剖析与紧急修复指南
前端·javascript·github
怕浪猫14 小时前
2026年金九银十,我面了22个前端
前端·javascript·面试
前端的日常15 小时前
一个人+AI做情侣食谱小程序,30天纯赚
前端·javascript·后端