CoderTools

正则表达式测试

测试和调试正则表达式,即时查看匹配结果

匹配结果

未找到匹配

                    

匹配详情

输入正则表达式模式和测试文本以查看详细匹配信息
/ /

快捷模板

替换功能

使用 $1, $2 等表示捕获组

                        
sed 's/pattern/replacement/g' input.txt
This sed command can be used in Unix/Linux/macOS terminal or Git Bash on Windows

正则表达式测试工具文档

什么是正则表达式?

正则表达式(regex)是编程中用于搜索、提取和操作文本的强大模式匹配工具。它们使用特殊字符和语法来定义可以匹配字符串的搜索模式。

正则表达式广泛用于数据验证、文本处理、日志分析和搜索替换操作。它们提供了一种简洁灵活的方式来识别文本中的模式。

如何使用此工具

  1. 选择快速模板或输入您的正则表达式模式
  2. 设置适当的标志(g表示全局,i表示忽略大小写,m表示多行)
  3. 输入或加载示例测试文本
  4. 查看实时匹配结果和详细信息
  5. 使用替换功能测试替换操作

正则表达式标志

g
全局
查找所有匹配,而不只是第一个
i
忽略大小写
不区分大小写的匹配
m
多行
^ 和 $ 匹配行边界

常用正则表达式模式

基础模式
\\d - 任意数字 (0-9)
\\w - 单词字符 (a-z, A-Z, 0-9, _)
\\s - 空白字符
. - 除换行符外的任意字符
量词
+ - 一个或多个
* - 零个或多个
? - 零个或一个
{n} - 恰好n次
锚点
^ - 行开始
$ - 行结束
\\b - 单词边界

实际示例

邮箱地址验证

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}

匹配:一个或多个有效字符,然后是@,域名,以及2位以上的字母扩展名。

电话号码(美国格式)

\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})

捕获区号、交换机号和号码,支持灵活的格式。

匹配 (555) 123-4567, 555.123.4567, 555-123-4567

URL匹配

https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)

匹配HTTP/HTTPS网址,支持可选的www前缀和各种路径格式。

匹配 https://example.com, http://www.site.org/path

强密码验证

^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d@$!%*?&]{8,}$

要求至少8个字符,包含小写、大写和数字。

匹配 Password123, MyStr0ngP@ss

高级功能

捕获组
使用括号()捕获匹配的部分用于替换
([0-9]{4})-([0-9]{2})-([0-9]{2})
前瞻/后瞻
基于前面/后面的内容进行匹配但不包含它们
(?=.*password)
非捕获组
使用(?:pattern)进行分组但不捕获
(?:http|https)://

技巧和最佳实践

  • 从简单开始,逐步增加复杂度
  • 使用全局标志(g)查找所有匹配
  • 用反斜杠(\)转义特殊字符
  • 用各种输入示例彻底测试
  • 使用捕获组进行复杂替换
  • 处理大文本时考虑性能

sed Command Generation

This tool automatically generates equivalent sed commands based on your regex pattern and replacement text, making it easy to use regex in Unix/Linux command line.

Search Mode (Empty Replacement)

When replacement text is empty, generates a search command to print matching lines only.

sed -n '/pattern/p' input.txt
示例:模式:error
结果:打印所有包含 'error' 的行

Replace Mode (With Replacement)

When replacement text is provided, generates a substitution command.

sed 's/pattern/replacement/flags' input.txt
示例:模式:foo,替换:bar
结果:将所有 'foo' 替换为 'bar'
Note: Special characters are automatically escaped. The generated command works in Unix/Linux/macOS terminals and Git Bash on Windows.

最佳实践

从简单开始,逐步增加复杂度

逐步构建正则表达式。从匹配部分情况的简单模式开始,然后细化以处理边界情况。每一步测试可以避免复杂的调试。

尽可能使用非捕获组

当不需要捕获组时,使用(?:...)而不是(...)。这可以提高性能并保持捕获组编号更清晰。

锚定您的模式

在适当的时候使用^和$将模式锚定到行/字符串边界。未锚定的模式可能匹配意外的子字符串。

使用具体的字符类

不要使用.*(匹配所有内容),而是使用具体的类如[a-zA-Z]+或\d{3}。过于宽泛的模式会导致错误匹配和回溯问题。

转义特殊字符

当您想匹配字面量时,记得转义 . * + ? [ ] ( ) { } ^ $ \\ |。可以使用本工具的正则转义格式来帮助。

用边界情况测试

用空字符串、超长字符串、特殊字符和Unicode测试您的正则。真实世界的数据经常包含意外的模式。

常见问题排查

为什么我的模式什么都匹配不到?

检查标志:'g'用于多次匹配,'i'用于不区分大小写,'m'用于多行。另外验证特殊字符是否正确转义。

为什么我的正则导致浏览器卡住?

嵌套量词如(a+)+或(a|aa)*导致灾难性回溯。简化您的模式或如果支持的话使用占有量词。

为什么捕获组返回意外的值?

组编号从第一个(...)开始为1。组0是整个匹配。非捕获组(?:...)不占用组编号。

为什么我的模式在不同语言中行为不同?

正则表达式风格各异。JavaScript在旧浏览器中不支持后行断言。\b、\w等功能在Unicode中可能表现不同。在目标环境中测试。