是不是刚接触正则表达式就被那些奇怪的符号吓住了?看着 “^$.*+?()[]” 这些字符,根本不知道啥意思;想写个简单的匹配规则,要么匹配不到内容,要么把无关文字都抓进来;好不容易记住几个符号,换个场景又不知道怎么用了?别着急,今天兔子哥就带零基础的朋友入门正则表达式语法,详解常用符号的含义和用法,哪怕你之前没碰过正则,跟着这篇教程学,也能搞懂这些符号怎么用,一起往下看吧!
一、先搞懂:正则表达式到底是啥?为啥要学符号?
可能有朋友会问,不就是匹配文字吗?为啥要用这么多符号?其实啊,正则表达式就是一套 “文字规则密码”,这些符号是用来描述 “你想找什么样的文字”。比如你想找所有手机号,总不能一个个写出来吧?用符号 “^1 [3-9]\d {9}$” 就能告诉电脑 “找 11 位符合规则的数字”,这就是符号的作用 —— 用简洁的方式描述复杂规则。
很多新手觉得正则难,其实难在一开始没搞懂每个符号的 “脾气”。就像学英语得先认识字母,学正则也得先吃透这些基础符号。只要把常用符号的含义搞清楚,后面写规则就会顺很多。有个零基础的朋友说:“之前看到正则就头疼,后来搞懂每个符号啥意思,突然就开窍了,原来没那么复杂!” 这或许暗示只要方法对,零基础也能学好正则符号。
二、基础符号入门:这 6 个 “核心成员” 必须认识
1. 普通字符:就是你看到的 “字面意思”
像字母、数字、汉字这些 “正常” 的字符,在正则里就代表它们自己。比如正则写 “苹果”,就能匹配文本里的 “苹果”;写 “123”,就能匹配 “123”。这是最简单的符号,不用记特殊规则,看到啥就匹配啥。
不过要注意,空格也是普通字符,如果你想匹配带空格的内容,比如 “hello world”,正则就得写成 “hello world”,中间的空格不能漏,不然匹配不到。
2. 通配符 “.”:匹配任意一个字符(除了换行)
这个点符号可厉害了,它能代表任何一个字符(换行符除外)。比如正则 “a.b”,能匹配 “a1b”“a@b”“a 好 b”—— 只要中间是一个字符就行。但它只能匹配 “一个” 字符,如果你写 “a..b”,就需要中间有两个字符才能匹配,比如 “a12b”“a@#b”。
虽然 “.” 很灵活,但新手容易用过头,比如想匹配 “abc”,写 “a.c” 确实能匹配,但也会匹配 “a1c”“a@c”,如果想精确匹配 “abc”,直接写 “abc” 就行,别用 “.” 画蛇添足。
3. 边界符号 “^” 和 “$”:给匹配 “画范围”
- “^” 表示 “开头”:比如正则 “^ 春天”,只能匹配以 “春天” 开头的文字,像 “春天来了” 能匹配,“我爱春天” 就不行;
- “”,只能匹配以 “冬天” 结尾的文字,像 “寒冷的冬天” 能匹配,“冬天快乐” 就不行;
- 一起用 “^ 你好 $”:就只能匹配 “你好” 这两个字,多一个字少一个字都不行,适合精确验证单个内容。
三、进阶符号详解:控制匹配范围的 “关键按钮”
1. 字符类 “[]”:批量匹配一类字符
如果想匹配 “0-9 任意一个数字”,总不能写 “0|1|2|...|9” 吧?用 “[]” 就能批量指定范围:
- “[0-9]”:匹配任意一个数字(0 到 9 都行);
- “[a-z]”:匹配任意一个小写字母;
- “[A-Z]”:匹配任意一个大写字母;
- “[0-9a-zA-Z]”:匹配任意数字或字母,注册账号时验证用户名常用这个。
还能在 “[]” 里用 “-” 表示范围,比如 “[3-7]” 匹配 3 到 7 的数字,“[a-f]” 匹配 a 到 f 的小写字母,超方便。
2. 量词 “*+?{}”:控制匹配次数
光知道匹配什么字符还不够,还得告诉电脑 “要匹配几次”,这就是量词的作用:
- “”:匹配 0 次或多次(可以没有,也可以有很多),比如 “a” 能匹配 “”“a”“aa”“aaa”;
- “+”:匹配 1 次或多次(至少有 1 次),比如 “a+” 能匹配 “a”“aa” 但不能匹配空;
- “?”:匹配 0 次或 1 次(可有可无),比如 “a?” 能匹配 “” 或 “a”;
- “{n}”:正好匹配 n 次,比如 “a {3}” 只能匹配 “aaa”;
- “{n,}”:至少匹配 n 次,比如 “a {2,}” 能匹配 “aa”“aaa”。
比如手机号是 11 位数字,用 “\d {11}” 就能匹配,这里 “\d” 是数字的简写,后面会讲。
3. 预定义类:偷懒专用的 “简写符号”
正则里有几个现成的简写,代替常用的字符类,记不住长规则可以记这些:
- “\d”:等同于 “[0-9]”,匹配数字;
- “\D”:等同于 “[^0-9]”,匹配非数字;
- “\w”:等同于 “[0-9a-zA-Z_]”,匹配字母、数字、下划线;
- “\s”:匹配空格、换行等空白字符。
比如想匹配 “3 个数字”,写 “\d {3}” 比 “[0-9]{3}” 简单多了,新手建议优先记这些简写。
四、特殊符号处理:转义符 “\” 的重要作用
有些符号在正则里有特殊含义(比如 “.”“*”“()”),如果想匹配它们本身,就得用 “\” 转义。比如你想匹配文本里的 “www.baidu.com”,直接写 “www.baidu.com” 是不行的,因为 “.” 会被当成通配符。这时候就得转义,写成 “www.baidu.com”,这样 “.” 就变成普通字符了。
不同的工具和编程语言,对转义符的处理可能不一样。比如在 JavaScript 里写正则,有时候需要用两个反斜杠 “\”,而在在线测试工具里可能用一个 “\” 就行。至于为什么会有这种差异,具体机制待进一步研究,新手遇到转义问题,最好先在测试工具里试试,没问题再用。
不过话说回来,转义符虽然有点麻烦,但只要记住 “遇到特殊符号就加 \”,大部分情况都能解决。比如想匹配 “(123)”,正则就得写成 “123”,给 “()” 都加上转义。
五、常用符号速查表:新手必备,随时翻看
| 符号 | 含义 | 例子 | 匹配效果 |
|---|---|---|---|
| . | 任意字符(除换行) | a.b | 匹配 a1b、a@b、a 好 b |
| ^ | 开头 | ^abc | 匹配 abc123、abcdef |
| $ | 结尾 | abc$ | 匹配 123abc、xyabc |
| [] | 字符类 | [0-9] | 匹配 0-9 任意数字 |
| * | 0 次或多次 | a* | 匹配、a、aa、aaa |
| + | 1 次或多次 | a+ | 匹配 a、aa、aaa |
| ? | 0 次或 1 次 | a? | 匹配、a |
| \d | 数字 | \d+ | 匹配 123、4567 |
| \w | 字母数字下划线 | \w+ | 匹配 abc、123、a1_b |
六、自问自答:新手学符号常遇到的问题
问:记不住这么多符号咋办?
答:不用死记硬背!先把 “.”“[]”“*+”“\d” 这几个最常用的记下来,其他的用的时候查表格就行。多写几次规则,用熟了自然就记住了。博主经常用的办法是,把速查表存在手机里,忘了就翻一翻。
问:为啥我写的正则匹配结果和想的不一样?
答:大概率是符号用错了范围。比如想用 “a.b” 匹配 “a1b2b”,结果匹配了整个字符串,这是因为 “.” 是贪婪匹配,改成 “a.*?b”(非贪婪)就能只匹配 “a1b”。多测试,看每次修改符号后结果怎么变,很快能找到问题。
兔子哥的小建议
学正则符号,千万别一开始就追求记住所有符号,重点是理解每个符号的 “作用范围”。比如 “*” 和 “+” 的区别在是否允许 0 次,“^$” 的作用是限定边界,这些核心逻辑搞懂了,符号就没那么难记了。
刚开始可以从简单规则练起,比如先写 “匹配所有数字”(\d+),再写 “匹配 3 位数字”(\d {3}),慢慢增加难度。遇到不懂的符号,就用在线测试工具(比如 regex101)试一下,输入符号看匹配结果,比看书更直观。
其实正则符号就像积木,单个符号很简单,组合起来能搭出复杂规则。只要耐心搞懂每个符号的含义,多练习组合使用,你会发现正则表达式没那么可怕,反而会觉得用符号描述规则很有趣。希望这篇教程能帮你轻松入门,以后看正则符号就像看中文一样轻松!
标签: 正则表达式 hello world
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~