正则表达式(Regular Expression,简称 regex)是用一串特殊字符描述文本模式的规则,用于查找、提取、校验和替换文本。下面重点说明概念、原理与常见用途。
正则表达式是什么
正则表达式(Regular Expression,简称 regex)是用一串特殊字符描述文本模式的规则,用于查找、提取、校验和替换文本。例如 ^1[3-9]\d{9}$ 描述大陆 11 位手机号。几乎所有编程语言和文本编辑器都支持正则,但各自的语法细节略有差异。
- . 任意字符(默认不含换行),\d 数字,\w 字母数字下划线,\s 空白
- * 0 次或多次,+ 1 次或多次,? 0 或 1 次,{m,n} m 到 n 次
- ^ 开头,$ 结尾,\b 单词边界
示例
输入:正则 ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$,文本“user@example.com”
匹配结果:“user@example.com”
说明:邮箱(简化版)。
工作原理
正则引擎把表达式编译成状态机,从文本左侧开始逐个位置尝试匹配;遇到量词时先尽量多匹配(贪婪),失败再回溯。多数语言使用回溯引擎(PCRE、JavaScript、Python、Java),复杂嵌套量词可能导致回溯爆炸;Go 和 RE2 使用线性时间引擎,不支持反向引用。
规则说明
- 特殊字符 . * + ? ^ $ ( ) [ ] { } | \ 需要用 \ 转义
- 分组 ( ) 会捕获内容,(?: ) 只分组不捕获
- (?<name> ) 命名分组,\1 反向引用
- (?= ) 正向先行断言,(?! ) 负向先行断言,(?<= ) 后行断言
- 在字符串字面量中写正则时,反斜杠可能需要写两次
本站的正则表达式测试工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【正则怎么匹配中文?】用 [\u4e00-\u9fff] 匹配常用汉字;需要包括扩展区时用 \p{Script=Han}(JavaScript 需 u 标志)。
【贪婪和非贪婪有什么区别?】贪婪(.*)尽量多匹配,非贪婪(.*?)尽量少匹配。
【为什么校验总是通过?】可能没有加 ^ 和 $,只要文本中包含符合的部分就会通过。
文中示例可以在本站对应工具中验证;处理密码、证件号等敏感数据时,请注意保护隐私。