--- title: 正则表达式的常用语法规则 date: 2023-01-31 21:27:00 +0800 categories: [工具] tags: [正则表达式] pin: false --- ## 什么是正则表达式? 其实正则表达式就是描述一类字符串的特征,通过这个特征与特定函数配合使用,对其他的字符串进行匹配、查找、替换、分割等操作的逻辑公式! ## 我们什么时候使用正则表达式呢? 在编程中,不是所有的字符操作都使用正则表达式,只有当我们遇到复杂字符串的时候,才会用到正则表达式。 ## 正则表达式的语法规则 正则表达式秒素了一类字符串的特征,通过这个特征与特定的函数配合,对其他的字符串进行匹配、查找、替换以及分割操作! 这类字符串的特征是有一个或者多个 - 1.普通字符(比如a到z)、 - 2.元字符(有特殊功能的字符比如*、+、?), 正则表达式正是由普通字符和元字符组成的一个字符串,例如'/a/',a就是普通字符,/是定界符(表示正则表达式的开始或结束)。下面是正则表达式语法参考表 | 字符 | 描述 | 示例 | |------|------|------| | `\` | 转义字符 | `\.` 匹配点号本身 | | `^` | 匹配输入字符串的开始位置 | `^abc` 匹配以"abc"开头的字符串 | | `$` | 匹配输入字符串的结束位置 | `xyz$` 匹配以"xyz"结尾的字符串 | | `*` | 匹配前面的子表达式零次或多次 | `ab*c` 匹配 "ac"、"abc"、"abbc" 等 | | `+` | 匹配前面的子表达式一次或多次 | `ab+c` 匹配 "abc"、"abbc",但不匹配 "ac" | | `?` | 匹配前面的子表达式零次或一次 | `colou?r` 匹配 "color" 和 "colour" | | `{n}` | 匹配确定的 n 次 | `o{2}` 匹配 "food" 中的两个 o,但不匹配 "Bob" 中的 o | | `{n,m}` | 最少匹配 n 次且最多匹配 m 次 | `o{1,3}` 匹配 "foooood" 中的前三个 o | | `??`, `*?`, `+?`, `{n,m}?` | 非贪婪匹配(最小匹配) | `o+?` 在 "oooo" 中只匹配第一个 o | | `.` | 匹配除换行符外的任何单个字符 | `a.c` 匹配 "abc"、"aac"、"a&c" 等 | | `(pattern)` | 匹配 pattern 并捕获匹配项 | `(abc)` 匹配并捕获 "abc" | | `x\|y` | 匹配 x 或 y | `z\|food` 匹配 "z" 或 "food" | | `[xyz]` | 字符集合,匹配所包含的任意一个字符 | `[abc]` 匹配 "plain" 中的 'a' | | `[^xyz]` | 负值字符集合,匹配未包含的任意字符 | `[^abc]` 匹配 "plain" 中的 'p'、'l'、'i'、'n' | | `[a-z]` | 字符范围,匹配指定范围内的任意字符 | `[a-z]` 匹配任意小写字母 | | `[^a-z]` | 负值字符范围,匹配不在指定范围内的字符 | `[^a-z]` 匹配任意非小写字母 | | `\b` | 匹配单词边界 | `er\b` 匹配 "never" 中的 'er',但不匹配 "verb" 中的 'er' | | `\B` | 匹配非单词边界 | `er\B` 匹配 "verb" 中的 'er',但不匹配 "never" 中的 'er' | | `\d` | 匹配数字字符,等价于 `[0-9]` | `\d+` 匹配一个或多个数字 | | `\D` | 匹配非数字字符,等价于 `[^0-9]` | `\D+` 匹配一个或多个非数字字符 | | `\f` | 匹配换页符 | | | `\n` | 匹配换行符 | | | `\r` | 匹配回车符 | | | `\s` | 匹配任何空白字符(空格、制表符、换页符等) | `\s+` 匹配一个或多个空白字符 | | `\S` | 匹配任何非空白字符 | `\S+` 匹配一个或多个非空白字符 | | `\w` | 匹配单词字符(字母、数字、下划线) | `\w+` 匹配一个或多个单词字符 | | `\W` | 匹配非单词字符 | `\W+` 匹配一个或多个非单词字符 | ## 中文正则验证 - 1.js 匹配中文字符的正则表达式: \[\u4e00-\u9fa5\] 匹配双字节字符(包括汉字在内):\[^\x00-\xff\] - 2.PHP /^\[\x{4e00}-\x{9fa5}\]+$/u 其中"\x{4e00}-\x{9fa5}"代表汉字验证。"/u"代表unicode(utf-8)匹配。 在php中,不支持\[\u4e00-\u9fa5\]匹配汉字,而是用\x表示十六进制数据,然而php中用"\[\x4e00-\x9fa5\]"的写法也是错的,必须用{}把它包起来才行。此外,由于编码关系,需要用到"/u"声明编码格式.