正则表达式快速入门

1. 基础概念

正则表达式(Regular Expression),又称规则表达式,是一种文本模式,通常用来检索、替换和控制文本。学习正则表达式,实际上是在学习一种十分灵活的逻辑思维。

2. 核心语法

常用字符

符号说明示例
.匹配任意单个字符a.c → "abc"、"a#c"
*前边元素出现0次或多次ab*c → "ac"、"abbc"
+前边元素出现1次或多次ab+c → "abc"、"abbc"
?前边元素出现0或1次

colou?r → "color"、"colour"。对于字符串“oooo","o+?"

将匹配单个"o",而"o+"将匹配所有"o"。

{n}精确匹配n次a{2} → "aa"
{n,}匹配至少出现n次/a{2,}/ 匹配 "aa", "aaaa" 和 "aaaaa" 但是不匹配 "a"。
{n,m}匹配至少 n 次,最多 m 次

/a{1, 3}/ 并不匹配“cndy”中的任意字符,匹配“candy”

中的 a,也匹配“caaaaaaandy”中的前三个 a。

[ ]匹配在 [ ] 里面的任意字符[abc] 匹配 ab 或 c 中的任意字符
[^ ]匹配不在 [ ] 里面的任意字符[^abc] 匹配除 abc 之外的字符;“[^a-z]"不匹配字母
( )捕获分组(ab)+ → "abab"
x|y匹配x或yz|food"能匹配"z"或"food"。"(z|f)ood"则匹配"zood"或"food"。
\转义字符,匹配特殊符号"\[" 匹配 "[", "\*" 匹配 "*"
\d匹配数字,等价于 [0-9]
\w匹配单词字符 ,等价于 [A-Za-z0-9]
\s\S匹配所有
^匹配字符串开头
$匹配字符串结尾
3. 典型场景

邮箱验证

^[\w.-]+@[\w-]+\.[a-zA-Z]{2,4}$

分解说明:

  • ^ 开始
  • [\w.-]+ 用户名(字母/数字/._-)
  • @ 固定符号
  • [\w-]+ 域名主体
  • \. 转义点号
  • [a-zA-Z]{2,4}$ 2-4位字母的顶级域名

匹配日期(YYYY-MM-DD):

^\d{4}-\d{2}-\d{2}$

4.Cadence skill:模式匹配函数

rexMatchp: 匹配字符串或符号列表

    rexMatchp("[0-9]*[.][0-9]+" ".001")       =>t

    rexMatchp("[0-9]*[.][0-9]+" ".")       =>nil

    rexMatchp("fet+" "nfet_")       =>t

rexReplace:替换子字符串

    rexCompile( "[0-9]+" )   => t

    rexReplace( "abc-123-xyz-890-wuv" "(*)" 1)

                                         => "abc-(*)-xyz-890-wuv"

    rexReplace( "abc-123-xyz-890-wuv" "(*)" 2)

                                         => "abc-123-xyz-(*)-wuv"

    rexReplace( "abc-123-xyz-890-wuv" "(*)" 3)

                                         => "abc-123-xyz-890-wuv"

   rexReplace( "abc-123-xyz-890-wuv" "(*)" 0)

                                        => "abc-(*)-xyz-(*)-wuv"

    rexCompile( "^test" )     => t

    rexReplace( "test_a" "bb" 0)   => "bb_a"

    rexReplace( "test_a" "[&]" 0)   => "[tets]_a"

; < >替换为[ ]

pin="a<00>0"

rexCompile("<")    => t

a=rexReplace(pin "[" 0)    => "a[00>0"

rexCompile(">")    => t

b=rexReplace(a "]" 0)    => "a[00]0"

                             

5.常用正则表达式

用户名/^[a-z0-9_-]{3,16}$/
密码/^[a-z0-9_-]{6,18}$/
密码2(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$ (由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上)
十六进制值/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
电子邮箱/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/或\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
URL/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ 或 [a-zA-z]+://[^\s]*
IP 地址/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/
/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/ 或 ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
HTML 标签/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/或<(.*)(.*)>.*<\/\1>|<(.*) \/>
删除代码\\注释(?<!http:|\S)//.*$
匹配双字节字符(包括汉字在内)[^\x00-\xff]
汉字(字符)[\u4e00-\u9fa5]
Unicode编码中的汉字范围/^[\u2E80-\u9FFF]+$/
中文及全角标点符号(字符)[\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]
日期(年-月-日)(\d{4}|\d{2})-((0?([1-9]))|(1[1|2]))-((0?[1-9])|([12]([1-9]))|(3[0|1]))
日期(月/日/年)((0?[1-9]{1})|(1[1|2]))/(0?[1-9]|([12][1-9])|(3[0|1]))/(\d{4}|\d{2})
时间(小时:分钟, 24小时制)((1|0?)[0-9]|2[0-3]):([0-5][0-9])
中国大陆固定电话号码(\d{4}-|\d{3}-)?(\d{8}|\d{7})
中国大陆手机号码1\d{10}
中国大陆邮政编码[1-9]\d{5}
中国大陆身份证号(15位或18位)\d{15}(\d\d[0-9xX])?
非负整数(正整数或零)\d+
正整数[0-9]*[1-9][0-9]*
负整数-[0-9]*[1-9][0-9]*
整数-?\d+
小数(-?\d+)(\.\d+)?
空白行\n\s*\r 或者 \n\n(editplus) 或者 ^[\s\S ]*\n
QQ号码[1-9]\d{4,}
不包含abc的单词\b((?!abc)\w)+\b
匹配首尾空白字符^\s*|\s*$

6.参考资料

正则表达式 – 语法 | 菜鸟教程https://www.runoob.com/regexp/regexp-syntax.html

正则表达式语法速查|正则教程https://stackoverflow.org.cn/regexsucha/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值