正则表达式(Regex/RegExp)是一种用于文本模式匹配、替换、验证和提取的字符序列规则,广泛应用于编程、数据处理、系统运维等领域。它通过普通字符和特殊元字符组合,定义一类字符串的结构,核心是用简洁规则匹配复杂文本逻辑。一、核心定义与本质• 定义:由普通字符(如字母、数字)和特殊元字符(如`^`、`$`、`\d`)组成的模式,用于描述待匹配的字符串集合。若字符串符合该模式,则称为“匹配成功”。• 本质:用数学逻辑(正则集)简化文本处理,避免手动编写复杂的字符串判断代码。二、常见元字符与语法元字符是正则的核心,不同语言/工具(如Java、Shell、Python)语法略有差异,但核心规则通用:1. 基础匹配符• `.`:匹配任意单个字符(除换行符),如`a.b`匹配`a1b`、`acb`;• `^`:匹配行/字符串开头,如`^java`匹配以`java`开头的内容;• `$`:匹配行/字符串结尾,如`java$`匹配以`java`结尾的内容;• `[]`:字符集,匹配括号内任意一个字符,如`[0-9]`匹配数字、`[a-z]`匹配小写字母;• `[^]`:取反字符集,匹配非括号内的字符,如`[^0-9]`匹配非数字。2. 重复匹配符• `*`:前一个字符/模式重复0次或多次,如`lo*l`匹配`ll`(o出现0次)、`lool`(o出现2次);• `+`:前一个字符/模式重复1次或多次(扩展正则),如`a+b`匹配`ab`、`aab`;• `?`:前一个字符/模式可选(0或1次),如`colou?r`匹配`color`或`colour`;• `{m,n}`:前一个模式重复m到n次(扩展正则),如`a{2,4}`匹配`aa`、`aaa`、`aaaa`。3. 特殊转义符• `\d`:匹配数字(等价于`[0-9]`);• `\w`:匹配字母、数字、下划线(等价于`[a-zA-Z0-9_]`);• `\s`:匹配空白符(空格、制表符`\t`、换行`\n`等);• `\b`:匹配单词边界(如`\bjava\b`仅匹配独立单词`java`)。三、典型应用场景1. 文本搜索:用`grep`(Shell)、`Pattern.matcher()`(Java)等工具,快速定位日志中含错误码的行;2. 数据验证:验证邮箱(如`^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$`)、手机号格式;3. 批量替换:用`sed`(Shell)或Python的`re.sub()`,将文本中所有`old`替换为`new`;4. 提取信息:从HTML/JSON中提取IP地址(如`\b(?:\d{1,3}\.){3}\d{1,3}\b`)。四、工具与语言支持• Shell:`grep`(基础正则)、`egrep`/`grep -E`(扩展正则)、`sed`、`awk`;• 编程语言:Java(`java.util.regex`包)、Python(`re`模块)、JavaScript(`RegExp`对象);• 数据库:PostgreSQL的`~`操作符、MySQL的`REGEXP`函数。五、注意事项• 转义问题:在Shell/Java中,`\`需用`\\`转义(如`\d`需写为`\\d`);• 性能优化:避免过度复杂的正则(如嵌套多层`.*`),可能导致“回溯爆炸”;• 兼容性:不同工具对正则的支持略有差异(如Shell的基础正则需用`\{m,n\}`,扩展正则用`{m,n}`)。