Loading...
Loading...
免费的在线正则表达式测试器,支持实时高亮——测试和调试用于验证、提取和搜索替换的正则表达式。
正则表达式(Regex 或 regexp)是一系列字符,定义了一个搜索模式。它是文本处理中最强大、最广泛使用的工具之一——用于验证输入格式(电子邮件地址、电话号码、URL)、从结构化或非结构化文本中提取数据(日志、HTML、CSV)以及在任意长度的字符串上执行复杂的查找替换操作。
正则表达式的基本构建块包括:字面字符(a、1、@ 匹配自身)、元字符(. 匹配任意字符、\d 匹配数字、\w 匹配单词字符)、量词(* 零次或多次、+ 一次或多次、? 零次或一次、{n,m} 特定次数)、锚点(^ 字符串开始、$ 字符串结束)和分组((...) 捕获组、(?:...) 非捕获组)。
标志修改模式的匹配方式:g(全局——查找所有匹配,而非仅第一个)、i(忽略大小写)、m(多行模式——^ 和 $ 匹配行边界而非字符串边界)、s(点号匹配换行符)和 u(Unicode——启用 \u 转义和正确的 Unicode 属性匹配)。根据需要组合标志:/pattern/gim 表示全局、忽略大小写、多行。
捕获组是最强大的正则表达式特性之一。圆括号 () 不仅分组模式的一部分,还捕获匹配的文本供后续使用。例如,(\w+)@(\w+)\.(\w+) 分别捕获用户名、域名和顶级域。这些捕获的值可以在替换模式中引用为 $1、$2、$3,或在代码中以编程方式访问。
正则表达式的性能至关重要。编写不当的模式可能导致灾难性回溯,即正则引擎尝试指数级多的方式匹配一个字符串。常见原因:嵌套量词如 (a+)+、既匹配又排除某些字符的模式以及几乎匹配的长字符串。使用原子组 (?>...) 和占有量词可以防止此问题。此工具包含性能数据,帮助你测试模式在真实输入下的表现。
常见的实用正则表达式包括:用于电子邮件验证的 ^[\w.-]+@[\w.-]+\.\w{2,}$、用于 URL 匹配的 ^https?://[\w./?=&-]+、用于国际电话号码的 ^\+?\d{1,4}[\s-]?\d{6,14}$ 以及用于日期验证(YYYY-MM-DD)的 ^\d{4}-\d{2}-\d{2}$。在生产代码中使用前,始终用有效和无效的输入测试你的模式。
默认情况下,量词是贪婪的——它们尽可能多地匹配。添加 ? 使其变为懒惰——尽可能少地匹配。例如,在字符串 <a><b> 上,模式 <.+> 匹配 <a><b>(贪婪,一直到最后一个 >),而 <.+?> 匹配 <a>(懒惰,在第一个 > 处停止)。
前瞻 (?=...) 断言一个模式紧随其后但不消耗字符。后顾 (?<=...) 断言一个模式在前。例如,(?<=\$)\d+ 匹配前面有美元符号的数字,但不包括美元符号。这些称为「零宽度断言」。
最常见的原因是嵌套量词如 (a+)+ 或 (.+)*。这些会产生指数级回溯。解决方法:(1)使模式更具体,(2)使用原子组 (?>...) 防止回溯,(3)使用占有量词如 ++。用真实输入长度测试,及早发现性能问题。
使用反斜杠转义特殊字符。字面点号是 \.(因为未转义的 . 匹配任意字符)。其他需要转义的字符:\*、\+、\?、\[、\]、\(、\)、\{、\}、\^、\$、\| 和 \\ 本身。在字符类 [...] 内部,大多数字元字符失去特殊含义,无需转义。
\w 匹配「单词字符」,包括字母、数字和下划线——但什么是「字母」取决于语言环境和 Unicode 设置。使用 u 标志(Unicode)时,\w 也匹配 Unicode 字母。字符类 [a-zA-Z0-9_] 仅匹配 ASCII 字母和数字。