regexp review

本文深入探讨了正则表达式在JavaScript中的使用方法,包括基本语法、匹配模式、量化符等,并通过具体示例展示了如何在实际场景中应用正则表达式进行字符串操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Modifiers

i:match ignore case
g:match global
m:match mult-line

regexp mode

about [] or ():

[abc]:match content in [],eg:[0-9] match number in 0-9

(x|y):match content split by "|"

about single character:

\d:  number

\s:  white space

\b:  end of word

\uxxxx:  Hex charactor

about quantifier

n+: content contains at least one  'n'
n*: content contains 'n' number amount 0 or n
n?: content contains 'n' number amount 0 or 1

Method for regexp

test()

var patt = /e/;
patt.test("The best things in life are free!");

exec()

/e/.exec("The best things in life are free!");

Commonly Method In Js

var str = "Visit w3cschool!";
var n = str.search("w3cschool");

replace()

var str = "Visit Microsoft!";
var res = str.replace(/microsoft/i, "w3cschool");

                                                > ___code form w3c
06-21
<think>我们之前讨论了使用CAST和SUBSTR将字符串的前4个字符转换为BIGINT。现在用户的新问题是关于正则表达式regexp)在SQL中的用法,特别是如何结合CAST和SUBSTR函数使用。用户提供的引用中提到了regexp_replace函数,但用户的需求更广泛,是关于正则表达式的使用。用户的问题可以分解为:1.正则表达式在SQL中的基本用法(如匹配、提取、替换)。2.如何将正则表达式与CAST和SUBSTR结合使用(例如,先用正则表达式提取特定模式的子串,再转换类型)。参考引用[1]中提到了`regexp_replace`函数,它用于替换字符串中匹配正则表达式的部分。引用[2]提到了`substr`函数,但用户现在更关注正则表达式。因此,回答将包括:-SQL中常用的正则表达式函数(如regexp_replace,regexp_extract,regexp_like等)。-如何结合正则表达式和类型转换(例如,用正则表达式提取数字部分,然后用CAST转换为BIGINT)。-注意事项和示例。注意:不同数据库系统(如MySQL,PostgreSQL,Hive)的正则表达式函数可能不同,需要区分。步骤:1.介绍SQL中常用的正则表达式函数。2.结合CAST和SUBSTR(或正则表达式提取函数)的示例。3.注意事项(如性能、跨数据库差异)。由于用户之前的问题涉及Hive(引用[2]提到Hive的substr),但新问题没有指定数据库,我们将以通用方式描述,并指出不同数据库的差异。回答结构:一、SQL中正则表达式常用函数二、结合正则表达式与CAST和SUBSTR的用法三、注意事项四、完整示例五、相关问题注意引用格式:在回答中引用用户提供的引用[1]和[2]时,在相应位置标注[^1][^2]。</think>### SQL中正则表达式的用法及与CAST/SUBSTR的组合应用 正则表达式(Regex)在SQL中主要用于高级字符串处理,结合`CAST`和`SUBSTR`可实现复杂的数据转换。以下是关键用法: --- #### 一、SQL正则表达式核心函数 1. **`REGEXP_REPLACE`** 替换匹配正则模式的子串: ```sql -- 语法 REGEXP_REPLACE(source_str, pattern, replacement) ``` - **示例**:移除非数字字符后转换为BIGINT ```sql SELECT CAST(REGEXP_REPLACE('2023-Q4', '[^0-9]', '') AS BIGINT) AS cleaned_num; -- 结果:20234 (先移除'-'再转换)[^1] ``` 2. **`REGEXP_SUBSTR`** 提取匹配正则模式的子串(比`SUBSTR`更灵活): ```sql -- 语法 REGEXP_SUBSTR(source_str, pattern) ``` - **示例**:提取前4位数字并转换 ```sql SELECT CAST(REGEXP_SUBSTR('ID:2024XYZ', '^\d{4}') AS BIGINT) AS year; -- 结果:2024 (从开头提取连续4位数字)[^2] ``` 3. **`REGEXP_LIKE`** 条件过滤(WHERE子句中使用): ```sql -- 检查是否以4位数字开头 SELECT * FROM logs WHERE REGEXP_LIKE(log_entry, '^[0-9]{4}'); ``` --- #### 二、与CAST/SUBSTR的组合应用 1. **场景:清洗不规则数据后转换类型** ```sql -- 步骤:移除非数字字符 → 截取前4位 → 转为BIGINT SELECT CAST( SUBSTR( REGEXP_REPLACE(raw_data, '[^0-9]', ''), -- 去除非数字 1, 4 ) AS BIGINT ) AS year_code FROM transactions; ``` 2. **场景:动态提取子串并转换** ```sql -- 提取"Year=XXXX"格式中的数字 SELECT CAST( REGEXP_SUBSTR(comment, 'Year=\K\d{4}') -- \K表示从匹配点开始提取 AS BIGINT ) AS detected_year FROM user_logs; ``` --- #### 三、跨数据库语法差异 | 函数 | PostgreSQL | MySQL | Hive | |---------------|------------------|------------------|------------------| | `REGEXP_REPLACE` | ✅ 支持 | ✅ `REGEXP_REPLACE` | ✅ 支持 | | `REGEXP_SUBSTR` | ✅ 支持 | ❌ 用`SUBSTRING`+`REGEXP` | ✅ 支持 | | 转义字符 | `\\s` (双反斜杠) | `\\\\s` (四反斜杠) | `\\s` (双反斜杠)[^1] | > **注意**: > - 正则性能开销大,大数据集建议先过滤再处理 > - 非数字子串转换会报错,需用`CASE`或`TRY_CAST`容错 > - 复杂模式优先用`REGEXP_SUBSTR`替代`SUBSTR` --- #### 四、完整示例 ```sql -- 从混杂文本中提取年份并转为BIGINT SELECT event_id, CAST( REGEXP_SUBSTR( event_description, '([0-9]{4})', -- 匹配4位连续数字 1, -- 从第1字符开始 1 -- 第1次出现 ) AS BIGINT ) AS event_year FROM events WHERE REGEXP_LIKE(event_description, '[0-9]{4}'); -- 预过滤加速查询 ``` 结果: | event_id | event_description | event_year | |----------|-------------------------|------------| | E1001 | "2023 Annual Conference"| 2023 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值