正则表达式测试
测试和调试正则表达式,即时查看匹配结果
匹配结果
匹配详情
快捷模板
替换功能
sed 's/pattern/replacement/g' input.txt
正则表达式测试工具文档
什么是正则表达式?
正则表达式(regex)是编程中用于搜索、提取和操作文本的强大模式匹配工具。它们使用特殊字符和语法来定义可以匹配字符串的搜索模式。
正则表达式广泛用于数据验证、文本处理、日志分析和搜索替换操作。它们提供了一种简洁灵活的方式来识别文本中的模式。
如何使用此工具
- 选择快速模板或输入您的正则表达式模式
- 设置适当的标志(g表示全局,i表示忽略大小写,m表示多行)
- 输入或加载示例测试文本
- 查看实时匹配结果和详细信息
- 使用替换功能测试替换操作
正则表达式标志
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})
捕获区号、交换机号和号码,支持灵活的格式。
URL匹配
https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)
匹配HTTP/HTTPS网址,支持可选的www前缀和各种路径格式。
强密码验证
^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d@$!%*?&]{8,}$
要求至少8个字符,包含小写、大写和数字。
高级功能
([0-9]{4})-([0-9]{2})-([0-9]{2})
(?=.*password)
(?: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
errorReplace Mode (With Replacement)
When replacement text is provided, generates a substitution command.
sed 's/pattern/replacement/flags' input.txt
foo,替换:bar学习资源
最佳实践
从简单开始,逐步增加复杂度
逐步构建正则表达式。从匹配部分情况的简单模式开始,然后细化以处理边界情况。每一步测试可以避免复杂的调试。
尽可能使用非捕获组
当不需要捕获组时,使用(?:...)而不是(...)。这可以提高性能并保持捕获组编号更清晰。
锚定您的模式
在适当的时候使用^和$将模式锚定到行/字符串边界。未锚定的模式可能匹配意外的子字符串。
使用具体的字符类
不要使用.*(匹配所有内容),而是使用具体的类如[a-zA-Z]+或\d{3}。过于宽泛的模式会导致错误匹配和回溯问题。
转义特殊字符
当您想匹配字面量时,记得转义 . * + ? [ ] ( ) { } ^ $ \\ |。可以使用本工具的正则转义格式来帮助。
用边界情况测试
用空字符串、超长字符串、特殊字符和Unicode测试您的正则。真实世界的数据经常包含意外的模式。
常见问题排查
为什么我的模式什么都匹配不到?
检查标志:'g'用于多次匹配,'i'用于不区分大小写,'m'用于多行。另外验证特殊字符是否正确转义。
为什么我的正则导致浏览器卡住?
嵌套量词如(a+)+或(a|aa)*导致灾难性回溯。简化您的模式或如果支持的话使用占有量词。
为什么捕获组返回意外的值?
组编号从第一个(...)开始为1。组0是整个匹配。非捕获组(?:...)不占用组编号。
为什么我的模式在不同语言中行为不同?
正则表达式风格各异。JavaScript在旧浏览器中不支持后行断言。\b、\w等功能在Unicode中可能表现不同。在目标环境中测试。