编码解码哈希加密格式化时间转换开发生成文本处理网络工具其他工具
首页 / 名词解释 / 正则表达式

正则表达式

正则表达式(regex / regexp,简称"正则")是一种用来描述"字符串匹配模式"的形式化小语言。你写一段由普通字符和元字符组成的模式,交给正则引擎,它就能在目标文本里查找、匹配、提取或替换符合该模式的片段。比如 \d{3}-\d{4} 可以匹配"三位数字-四位数字"这样的号码格式。它广泛用于表单校验、日志抓取、批量查找替换和文本切分。

它的表达力来自元字符,常见的有:

使用中要注意几点:不同语言的正则"方言"(JavaScript、PCRE、Python re、POSIX 等)在转义、前后查找、Unicode 处理上有差异,跨环境复用前最好实测;量词默认是贪婪的,会尽量多匹配,加 ? 才变非贪婪;嵌套量词(如 (a+)+)遇到特定输入可能触发指数级回溯,导致匹配卡死(ReDoS)。此外正则擅长扁平的模式匹配,并不适合解析 HTML、JSON 这类嵌套结构。

常见问题

正则表达式和文件通配符(glob,比如 *.txt)是一回事吗?
不是。glob 语法简单、只用于文件名匹配,其中 * 表示任意多个字符;而在正则里 * 表示"前一个元素重复零次或多次",同一个符号含义完全不同,正则的表达能力也远强于 glob。
为什么同一个正则在不同语言/工具里结果不一样?
因为存在多种正则方言(JavaScript、PCRE、Python re、POSIX 等),它们在转义规则、非捕获组、前后查找、Unicode 和多行模式等细节上并不一致。跨语言复用前建议在目标环境实测,别假设写法通用。
什么是灾难性回溯(ReDoS)?怎么避免?
当模式里含有嵌套量词(如 (a+)+)且遇到较长的不匹配输入时,引擎会尝试指数级数量的匹配路径,造成长时间卡死甚至拖垮服务。应避免嵌套量词、写更精确的模式,或改用线性时间匹配的引擎(如 RE2)。

相关工具

相关名词