*,+,?,{n} 等regexp正则函数核心量词符,进阶必掌握!
大家好,今天我们来分几篇文章讲讲REGEXP正则表达式函数中的正则表达式字符,因为只有掌握了这些字符之后,我们才能结合具体实际需求,编写REGEXP函数的第二参数,将各类符号进行连接组合使用,实现对复杂文本进行匹配、提取和替换的目的。
REGEXP函数是基于正则表达式,对复杂文本进行匹配、提取和替换的函数。
基本语法结构:
REGEXP(原始字符串,正则表达式,[匹配模式],[替换内容])
匹配模式是可选项,0或忽略表示提取,1表示判断是否包含,2表示替换。
替换内容是可选项,仅在匹配模式为2时有效,用来替换匹配的内容。
DeepSeek给到我们的常用的正则表达式核心符号大概分为六大类。
1.基础元字符
2.量词符
3.定位符
4.字符集合
5.分组与引用
6.特殊符号
今天我们主要讲讲第二大类的量词符,结合几个具体的小例子,并运用REGEXP函数代入,感受一下量词符的含义与作用。
*(星号):匹配前一个元素0次或多次。
星号表示前面的元素可以出现零次或多次。也就是说星号前面的元素可以完全不存在,也可以重复多次。
比如我们输入函数:
=REGEXP(B2,"哈*")
返回:
{"哈","","","","哈哈",""}
"哈"可以出现零次或多次,所以会匹配到"哈嘻呵嘿哈哈"中的所有"哈",同时还会匹配到不存在“哈”时的空字符串。
在正则表达式中,星号“*”匹配出现零次的情况在使用中具有一定的意义。
当你想要匹配一个元素,但这个元素可能完全不存在时,允许零次匹配提供了灵活性。
比如我们输入函数:
=REGEXP(B3,"哈")
匹配B3单元格"嘿呵"中的元素“哈”,但是B3单元格中不存在“哈”,则会返回一个错误值。
但是如果我们用正则表达式“哈*”:
=REGEXP(B3,"哈"*)
即允许星号前面元素“哈”出现零次,即最终会返回一个空值,避免了错误值的存在。
加号“+”表示前面的元素至少出现1次,也可以是多次。也就是说加号“+”前面的元素至少要出现1次,不能完全没有。
比如我们输入函数:
=REGEXP(B2,"哈+")
返回:
{"哈哈","哈哈"}
会将加号“+”前面的元素“哈”,出现1次或多次的记录提取出来。
?(问号)会匹配前一个元素0次或1次。
比如我们输入函数:
=REGEXP(B2,"哈?")
返回:
{"哈","哈","","","哈","哈",""}
"哈"可以出现零次或一次,所以会匹配到"哈哈嘻嘻哈哈"中的所有单个的"哈",同时还会匹配到不存在“哈”时的空字符串。
{n}:精确匹配n次。
比如我们输入函数:
=REGEXP(B2,"1{3}",2,"W")
我们会将B2单元格"a12211131111"中所有连续3次出现的1,即"111",替换为"W",替换后的数据最终变为"a122W3W1"。
{n,}:至少匹配n次。
比如我们输入函数:
=REGEXP(B2,"1{3,}",2,"W")
我们会将B2单元格"a12211131111"中所有至少连续3次出现的1,即"111"和"1111",替换为"W",替换后的数据最终变为"a122W3W"。
{n,m}:匹配n到m次。
比如我们输入函数:
=REGEXP(B2,"1{1,4}",2,"W")
我们会将B2单元格"a12211131111"中连续1次出现的1到连续4次出现的1,即"1"和"111"和"1111",替换为"W",替换后的数据最终变为"aW22W3W"。
量词符在职场应用中的案例
案例1:验证11位手机号。验证是否为常规的11位手机号(仅数字)。如果是正常的手机号返回真值,否则返回假值。
我们可以这样输入函数:
=REGEXP(B2,"^1[3-9]\d{9}#34;,1)
^1[3-9]:代表第1位1,第2位3~9
\d{9}:代表后续9位数字(总长度11位)
$:代表以以上11位数字结束的字符串。
案例2:提取金额(整数或小数)从文本中提取金额,例如"¥123.45"提取到的结果为"123.45"。
我们可以这样输入函数:
=REGEXP(B2,"\d+\.?\d*")
\d+:至少1位整数部分
\.?:可选小数点
\d*:可选小数部分