目录
正则表达式
正则表达式是一种用来描述字符串模式的工具,它可以用于匹配、查找、替换等操作。正则表达式由字符和特殊字符组成,可以使用这些字符来定义匹配规则。
1.常用的正则表达式字符和特殊字符
常用的正则表达式字符和特殊字符有:
- 普通字符:表示匹配该字符本身,如
a
表示匹配字母"a"。 - 元字符:具有特殊含义的字符,如
.
表示匹配除换行符以外的任意字符。 - 字符类:用
[]
表示,表示匹配括号内的任意一个字符,如[abc]
表示匹配字符"a"、“b"或"c”。 - 反义字符类:用
[^]
表示,表示匹配除括号内字符以外的任意字符,如[^abc]
表示匹配除"a"、“b”、"c"以外的任意字符。 - 重复字符:用
*
、+
、?
表示,分别表示匹配前一个字符0次或多次、1次或多次、0次或1次。 - 边界匹配:用
^
、$
表示,分别表示匹配字符串的开头和结尾。 - 分组:用
()
表示,可以将多个字符组合为一个整体,如(ab)+
表示匹配"ab"、“abab”、"ababab"等。 - 转义字符:用
\
表示,可以将特殊字符转义为普通字符,如.表示匹配字符"."。
2.正则表达式的用法:
- 匹配:使用
match()
函数可以在字符串中查找匹配正则表达式的部分,并返回一个包含匹配结果的数组。 - 查找:使用
search()
函数可以在字符串中查找匹配正则表达式的部分,并返回第一个匹配的位置。 - 替换:使用
replace()
函数可以将字符串中匹配正则表达式的部分替换为指定的内容。 - 分割:使用
split()
函数可以根据正则表达式将字符串分割为多个部分,并返回一个数组。
3.其他用法:
1.量词
用来指定前面的字符或字符类的重复次数。
常用的量词有:
*
:匹配前一个字符0次或多次。+
:匹配前一个字符1次或多次。?
:匹配前一个字符0次或1次。{n}
:匹配前一个字符恰好n次。{n,}
:匹配前一个字符至少n次。{n,m}
:匹配前一个字符至少n次,最多m次。
2.特殊字符
.
:匹配除换行符以外的任意字符。\d
:匹配数字字符。\D
:匹配非数字字符。\w
:匹配字母、数字、下划线字符。\W
:匹配非字母、数字、下划线字符。\s
:匹配空白字符(空格、制表符、换行符等)。\S
:匹配非空白字符。\b
:匹配单词边界。\B
:匹配非单词边界。
3.分组和引用
()
:将多个字符组合为一个整体。
(?:)
:非捕获分组,用于只匹配但不捕获。
\1
、
\2
、…:引用前面的分组,用于匹配相同的内容。
4.断言
(?=...)
:正向肯定前瞻,用于匹配满足某个条件的位置。(?!...)
:正向否定前瞻,用于匹配不满足某个条件的位置。(?<=...)
:反向肯定后顾,用于匹配位于某个条件之后的位置。(?<!...)
:反向否定后顾,用于匹配不位于某个条件之后的位置。
模式描述^匹配输入字符串的
$匹配输入字符串的开始位置
.匹配结束位置
的任何除“\n”之外
字符[…]单个
。匹配所字符集合
的包含
。例如,‘[abc]’可以匹配“plain”中的‘a’。[^…]任意一个字符
。匹配负值字符集合
的未包含
。例如,‘[^abc]’可以匹配“plain”中的‘p’。p1|p2|p3匹配p1或p2或p3。例如,‘z|food’能匹配“z”或“food”。‘(z|f)ood’则匹配“zood”或“food”。模式描述*匹配前面的子表达式任意字符
。例如,zo能匹配“z”以及“zoo”。等价于{0,}。+匹配前面的子表达式零次或多次
。例如,‘zo+’能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。{n}n是一个一次或多次
。匹配稳定的非负整数
。例如,‘o{2}’不能匹配“Bob”中的‘o’,但是能匹配“food”中的两个o。{n,m}m和n均为n次
,其中n<=m。非负整数
。最少匹配n次且最多匹配m次
正则表达式的用法非常灵活,可以根据具体的需求来选择合适的字符、特殊字符、量词、分组等来构建匹配规则。同时,正则表达式还支持一些高级的特性,如贪婪模式、非贪婪模式、修饰符等,可以进一步扩展正则表达式的功能。
正则表达式的详细用法还有很多,可以根据具体的需求来选择合适的正则表达式和相应的函数来进行操作。
1.操作1
代码如下(示例):
-- ^ 在字符串开始处进行匹配SELECT'abc'REGEXP'^a';-- $ 在字符串末尾开始匹配SELECT'abc'REGEXP'a$';SELECT'abc'REGEXP'c$’;
-- . 匹配任意字符
SELECT 'abc' REGEXP '.b';
SELECT 'abc' REGEXP '.c';
SELECT 'abc' REGEXP 'a.';
-- [...] 匹配括号内的任意单个字符
SELECT 'abc' REGEXP '[xyz]';
SELECT 'abc' REGEXP '[xaz]';
2.操作2
代码如下(示例):
-- [^...] 注意 ^ 符合只有在 [] 内才是取反的意思,在别的地方都是表示开始处匹配SELECT'a'REGEXP'[^abc]';SELECT'x'REGEXP'[^abc]';SELECT'abc'REGEXP'[^a]';-- a* 匹配 0 个或多个 a, 包括空字符串。 可以作为占位符使用 . 有没有指定字符都可以匹配
到数据
SELECT'stab'REGEXP'.ta*b';SELECT'stb'REGEXP'.ta*b';SELECT''REGEXP'a*';-- a+ 匹配 1 个或者多个 a, 但是不包括空字符SELECT'stab'REGEXP'.ta+b';SELECT'stb'REGEXP'.ta+b';
3.操作3
代码如下(示例):
-- [^...] 注意 ^ 符合只有在 [] 内才是取反的意思,在别的地方都是表示开始处匹配SELECT'a'REGEXP'[^abc]';SELECT'x'REGEXP'[^abc]';SELECT'abc'REGEXP'[^a]';-- a* 匹配 0 个或多个 a, 包括空字符串。 可以作为占位符使用 . 有没有指定字符都可以匹配
到数据
SELECT'stab'REGEXP'.ta*b';SELECT'stb'REGEXP'.ta*b';SELECT''REGEXP'a*';-- a+ 匹配 1 个或者多个 a, 但是不包括空字符SELECT'stab'REGEXP'.ta+b';SELECT'stb'REGEXP'.ta+b';
4.操作4
-- a{m,n} 匹配 m 到 n 个 a, 包含 m 和 nSELECT'auuuuc'REGEXP'au{3,5}c';SELECT'auuuuc'REGEXP'au{4,5}c';SELECT'auuuuc'REGEXP'au{5,10}c';-- (abc) abc 作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符
作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。
SELECT'xababy'REGEXP'x(abab)y';SELECT'xababy'REGEXP'x(ab)*y';SELECT'xababy'REGEXP'x(ab){1,2}y';
4.案例应用:
create_table stb00 asselect*from test01
;
create_table stb01 asselect col_02,col_03 from stb00
where col_03<>'应用程序版本号'and length(col_03)=12;--col_03匹配格式为xx-xx-xxxxxx x代表16进制字符(包括大小写)
create_table stb02 asselect
col_02,
col_03,
col_03 REGEXP'(^[0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][\.][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][\.][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF][0123456789|abcdefABCDEF]$)'from
stb01
;select*from stb02
limit100000;
版权归原作者 开心点幸运点 所有, 如有侵权,请联系我们删除。