正则表达式在开发过程中作用明显,灵活多变的匹配方式提供了处理复杂数据的可能性。
在正式使用前,要了解基本组成元素和语法结构,并了解如何拼凑和理解。
一、基本元素
元素 | 释义 | 示例 |
^ | 匹配起始字符 | ^a : 以a开头 |
$ | 匹配结尾字符 | ab$:以ab结尾 |
. | 匹配单个字符 | a.c:a和c之间任意单个字符均可,如abc |
* | 匹配任意个数在此之前的字符 | a*b:b前方出现任意次数的a均可,包括0次 |
+ | 匹配至少1个在此之前的字符 | ab+:a后紧跟的b至少1次即可 |
[] | 匹配[]方括号中任意单个字符 匹配[^]不在方括号中的内容 | [ab]:存在a或b即可 ;[0-9]: 0到9任意数字 [^ab]:存在不是a或b的字符即可 |
{} | 匹配{n} n个前面的字符 匹配{n,m} n-m个前面的字符 | a{1} :a; a{2}:aa;包含即可 a{1,2}:a或aa;a{1,3}:a,aa,aaa;包含即可 |
? | 匹配前方字符,可有可无 | a?: a是否出现都可 |
() | 将元素组合 | (a+[0-9])? : 括号内a和任意数字组合出现皆可,但结合? 表示括号内内容可有可无 |
* 若有更好的解释或解释错误,请纠正我
二、示例
不同的开发语言环境,正则的关键字不一样。此处示例采用的为clickhouse,关键字为MATCH 函数用于在字符串中使用正则表达式进行匹配,语法是match(haystack, pattern)
。如果是单纯的包含等操作可以用其他专门的语法类似like、position等替代,以下操作多为上述元素组合使用。
1、匹配字符中是否包含数字
-- 是否包含任意数字
select match('test.adb', '[0-9]'); -- 返回0
select match('t1est.a9db', '[0-9]'); -- 返回1
2、是否所有字符都是数字
-- 匹配是否全部由数字组成
select match('1623234', '^[0-9]*$') --返回1
select match('1623234', '^[0-9]+$') --返回1
* 和 + 在此处的含义结合元素含义去理解,不解可以咨询我。
3、是否是数值
注意数值有整型和浮点型,同时也有正负。
select match('2.2', '^-?[0-9]+(\.[0-9])?$') -- 返回1