pgsql正则表达式(pgsql正则表达式如何只提取中文)
## PostgreSQL 正则表达式### 简介PostgreSQL 提供了强大的正则表达式功能,用于匹配、提取和替换字符串模式。正则表达式是一种描述字符串模式的语言,允许您使用特殊字符和语法来匹配复杂字符串。### 1. 正则表达式基础#### 1.1 元字符| 元字符 | 描述 | 例子 | |---|---|---| | . | 匹配任意单个字符 | `a.c` 匹配 "abc"、"a1c"、"a.c" | | ^ | 匹配字符串开头 | `^abc` 匹配以 "abc" 开头的字符串 | | $ | 匹配字符串结尾 | `abc$` 匹配以 "abc" 结尾的字符串 | |
| 匹配零个或多个前一个字符 | `ab
c` 匹配 "ac"、"abc"、"abbc" 等 | | + | 匹配一个或多个前一个字符 | `ab+c` 匹配 "abc"、"abbc" 等,但不匹配 "ac" | | ? | 匹配零个或一个前一个字符 | `ab?c` 匹配 "ac"、"abc" | | {n} | 匹配 n 个前一个字符 | `a{3}c` 匹配 "aaac" | | {n,} | 匹配至少 n 个前一个字符 | `a{2,}c` 匹配 "aac"、"aaac" 等 | | {n,m} | 匹配至少 n 个且最多 m 个前一个字符 | `a{2,4}c` 匹配 "aac"、"aaac"、"aaaac" | | [ ] | 字符集,匹配括号内的任意一个字符 | `[abc]` 匹配 "a"、"b" 或 "c" | | [^ ] | 否定字符集,匹配除括号内字符外的任意字符 | `[^abc]` 匹配除 "a"、"b" 或 "c" 之外的任意字符 | | - | 指定字符范围 | `[a-z]` 匹配任意小写字母 | | \ | 转义字符,用于转义特殊字符 | `\.` 匹配点号 "." |#### 1.2 匹配模式PostgreSQL 支持两种匹配模式:
POSIX 基本正则表达式 (BRE)
:这是 PostgreSQL 默认的正则表达式模式。
POSIX 扩展正则表达式 (ERE)
:使用 `~
` 运算符来匹配 ERE 模式。#### 1.3 字符类| 字符类 | 描述 | 例子 | |---|---|---| | `\d` | 匹配任意数字 | `\d+` 匹配一个或多个数字 | | `\D` | 匹配非数字字符 | `\D+` 匹配一个或多个非数字字符 | | `\s` | 匹配空白字符(空格、制表符、换行符等) | `\s+` 匹配一个或多个空白字符 | | `\S` | 匹配非空白字符 | `\S+` 匹配一个或多个非空白字符 | | `\w` | 匹配单词字符(字母、数字、下划线) | `\w+` 匹配一个或多个单词字符 | | `\W` | 匹配非单词字符 | `\W+` 匹配一个或多个非单词字符 |### 2. 使用正则表达式#### 2.1 `~` 运算符`~` 运算符用于匹配字符串是否符合给定的正则表达式模式,返回布尔值:```sql SELECT 'abc' ~ '^a'; -- true SELECT 'def' ~ '^a'; -- false ```#### 2.2 `!~` 运算符`!~` 运算符用于匹配字符串是否不符合给定的正则表达式模式,返回布尔值:```sql SELECT 'abc' !~ '^a'; -- false SELECT 'def' !~ '^a'; -- true ```#### 2.3 `~
` 运算符`~
` 运算符用于匹配字符串是否符合给定的扩展正则表达式模式,返回布尔值:```sql SELECT 'abc' ~
'a.
c'; -- true SELECT 'def' ~
'a.
c'; -- false ```#### 2.4 `!~
` 运算符`!~
` 运算符用于匹配字符串是否不符合给定的扩展正则表达式模式,返回布尔值:```sql SELECT 'abc' !~
'a.
c'; -- false SELECT 'def' !~
'a.
c'; -- true ```#### 2.5 `regexp_matches` 函数`regexp_matches` 函数用于提取字符串中符合正则表达式模式的子字符串,返回一个文本数组:```sql SELECT regexp_matches('abc123def', '\d+'); -- {123} ```#### 2.6 `regexp_replace` 函数`regexp_replace` 函数用于替换字符串中符合正则表达式模式的子字符串,返回一个文本:```sql SELECT regexp_replace('abc123def', '\d+', 'xxx'); -- abcxxxdef ```### 3. 示例#### 3.1 匹配邮箱地址```sql SELECT email FROM users WHERE email ~
'^.+@.+\..+$'; ```#### 3.2 提取电话号码```sql SELECT regexp_matches(phone, '\d{3}-\d{3}-\d{4}'); ```#### 3.3 替换空格```sql SELECT regexp_replace(text, '\s+', '_'); ```### 总结PostgreSQL 正则表达式提供了一种强大的方式来处理字符串模式,包括匹配、提取和替换。熟练掌握正则表达式语法和函数,可以帮助您更有效地处理字符串数据。
PostgreSQL 正则表达式
简介PostgreSQL 提供了强大的正则表达式功能,用于匹配、提取和替换字符串模式。正则表达式是一种描述字符串模式的语言,允许您使用特殊字符和语法来匹配复杂字符串。
1. 正则表达式基础
1.1 元字符| 元字符 | 描述 | 例子 | |---|---|---| | . | 匹配任意单个字符 | `a.c` 匹配 "abc"、"a1c"、"a.c" | | ^ | 匹配字符串开头 | `^abc` 匹配以 "abc" 开头的字符串 | | $ | 匹配字符串结尾 | `abc$` 匹配以 "abc" 结尾的字符串 | | * | 匹配零个或多个前一个字符 | `ab*c` 匹配 "ac"、"abc"、"abbc" 等 | | + | 匹配一个或多个前一个字符 | `ab+c` 匹配 "abc"、"abbc" 等,但不匹配 "ac" | | ? | 匹配零个或一个前一个字符 | `ab?c` 匹配 "ac"、"abc" | | {n} | 匹配 n 个前一个字符 | `a{3}c` 匹配 "aaac" | | {n,} | 匹配至少 n 个前一个字符 | `a{2,}c` 匹配 "aac"、"aaac" 等 | | {n,m} | 匹配至少 n 个且最多 m 个前一个字符 | `a{2,4}c` 匹配 "aac"、"aaac"、"aaaac" | | [ ] | 字符集,匹配括号内的任意一个字符 | `[abc]` 匹配 "a"、"b" 或 "c" | | [^ ] | 否定字符集,匹配除括号内字符外的任意字符 | `[^abc]` 匹配除 "a"、"b" 或 "c" 之外的任意字符 | | - | 指定字符范围 | `[a-z]` 匹配任意小写字母 | | \ | 转义字符,用于转义特殊字符 | `\.` 匹配点号 "." |
1.2 匹配模式PostgreSQL 支持两种匹配模式:* **POSIX 基本正则表达式 (BRE)**:这是 PostgreSQL 默认的正则表达式模式。 * **POSIX 扩展正则表达式 (ERE)**:使用 `~*` 运算符来匹配 ERE 模式。
1.3 字符类| 字符类 | 描述 | 例子 | |---|---|---| | `\d` | 匹配任意数字 | `\d+` 匹配一个或多个数字 | | `\D` | 匹配非数字字符 | `\D+` 匹配一个或多个非数字字符 | | `\s` | 匹配空白字符(空格、制表符、换行符等) | `\s+` 匹配一个或多个空白字符 | | `\S` | 匹配非空白字符 | `\S+` 匹配一个或多个非空白字符 | | `\w` | 匹配单词字符(字母、数字、下划线) | `\w+` 匹配一个或多个单词字符 | | `\W` | 匹配非单词字符 | `\W+` 匹配一个或多个非单词字符 |
2. 使用正则表达式
2.1 `~` 运算符`~` 运算符用于匹配字符串是否符合给定的正则表达式模式,返回布尔值:```sql SELECT 'abc' ~ '^a'; -- true SELECT 'def' ~ '^a'; -- false ```
2.2 `!~` 运算符`!~` 运算符用于匹配字符串是否不符合给定的正则表达式模式,返回布尔值:```sql SELECT 'abc' !~ '^a'; -- false SELECT 'def' !~ '^a'; -- true ```
2.3 `~*` 运算符`~*` 运算符用于匹配字符串是否符合给定的扩展正则表达式模式,返回布尔值:```sql SELECT 'abc' ~* 'a.*c'; -- true SELECT 'def' ~* 'a.*c'; -- false ```
2.4 `!~*` 运算符`!~*` 运算符用于匹配字符串是否不符合给定的扩展正则表达式模式,返回布尔值:```sql SELECT 'abc' !~* 'a.*c'; -- false SELECT 'def' !~* 'a.*c'; -- true ```
2.5 `regexp_matches` 函数`regexp_matches` 函数用于提取字符串中符合正则表达式模式的子字符串,返回一个文本数组:```sql SELECT regexp_matches('abc123def', '\d+'); -- {123} ```
2.6 `regexp_replace` 函数`regexp_replace` 函数用于替换字符串中符合正则表达式模式的子字符串,返回一个文本:```sql SELECT regexp_replace('abc123def', '\d+', 'xxx'); -- abcxxxdef ```
3. 示例
3.1 匹配邮箱地址```sql SELECT email FROM users WHERE email ~* '^.+@.+\..+$'; ```
3.2 提取电话号码```sql SELECT regexp_matches(phone, '\d{3}-\d{3}-\d{4}'); ```
3.3 替换空格```sql SELECT regexp_replace(text, '\s+', '_'); ```
总结PostgreSQL 正则表达式提供了一种强大的方式来处理字符串模式,包括匹配、提取和替换。熟练掌握正则表达式语法和函数,可以帮助您更有效地处理字符串数据。