正则测试应用


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.1 应用简介

正则测试应用是一款专为开发者和文本处理爱好者设计的正则表达式测试工具,旨在帮助用户快速验证正则表达式、学习正则语法、提高文本处理效率。应用以紫色为主色调,营造专业高效的开发工具氛围。

应用涵盖了测试器、常用正则库、个人中心三大模块,收录了18个常用正则表达式模板,涵盖联系方式、证件号码、网络相关、字符匹配、日期时间、密码验证六大分类。通过实时匹配、高亮显示、捕获组展示等功能,帮助用户快速掌握正则表达式的使用技巧。

1.2 核心功能

功能模块 功能描述 实现方式
正则测试 实时匹配测试 RegExp + allMatches
匹配选项 忽略大小写、多行等 正则标志设置
结果展示 匹配位置、捕获组 列表卡片展示
常用正则 18个常用模板 分类筛选
快速应用 一键使用模板 导航传参
快速参考 正则语法速查 标签展示

1.3 常用正则分类

序号 分类名称 数量 包含内容
1 联系方式 3个 手机号码、邮箱地址、固定电话
2 证件号码 4个 身份证号、银行卡号、车牌号、邮政编码
3 网络相关 3个 IP地址、URL地址、域名
4 字符匹配 4个 中文字符、数字、正整数、英文字母
5 日期时间 2个 日期格式、时间格式
6 密码验证 2个 密码强度、用户名

1.4 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 setState -
目标平台 鸿蒙OS / Web API 21+

1.5 项目结构

lib/
└── main_regex_tester.dart
    ├── RegexTesterApp        # 应用入口
    ├── RegexPattern          # 正则模板数据模型
    ├── MatchResult           # 匹配结果数据模型
    ├── MainPage              # 主页面(底部导航)
    ├── TesterPage            # 测试页面
    ├── PatternsPage          # 常用正则页面
    └── ProfilePage           # 个人中心页面

二、系统架构

2.1 整体架构图

Data Layer

Presentation Layer

主页面
MainPage

测试页面

常用正则页面

个人中心

正则输入

匹配选项

测试文本

匹配结果

分类筛选

正则列表

快速应用

学习统计

快速参考

RegexPattern
正则模板模型

MatchResult
匹配结果模型

2.2 类图设计

contains

contains

contains

generates

displays

RegexTesterApp

+Widget build()

RegexPattern

+String name

+String pattern

+String description

+String example

+String category

MatchResult

+String text

+int start

+int end

+List<String> groups

MainPage

-int _currentIndex

-List<Widget> _pages

+Widget build()

TesterPage

-TextEditingController _patternController

-TextEditingController _textController

-List<MatchResult> _matches

-String _errorMessage

-bool _caseInsensitive

-bool _multiline

-bool _dotAll

-bool _unicode

+void _testRegex()

+void _applyPattern()

PatternsPage

-String _selectedCategory

+List<RegexPattern> _filteredPatterns

+Widget build()

ProfilePage

+Widget build()

2.3 页面导航流程

测试

常用

我的

应用启动

主页面

底部导航

测试页面

常用正则页面

个人中心

输入正则表达式

输入测试文本

查看匹配结果

选择分类

浏览正则列表

点击使用此正则

查看快速参考

查看帮助信息

2.4 正则测试流程

结果展示 正则引擎 测试页 用户 结果展示 正则引擎 测试页 用户 alt [正则语法正确] [正则语法错误] 输入正则表达式 输入测试文本 创建RegExp对象 执行allMatches 返回匹配列表 显示匹配结果 抛出异常 显示错误信息

三、核心模块设计

3.1 数据模型设计

3.1.1 正则模板模型 (RegexPattern)
class RegexPattern {
  final String name;          // 模板名称
  final String pattern;       // 正则表达式
  final String description;   // 功能描述
  final String example;       // 示例文本
  final String category;      // 所属分类
}
3.1.2 匹配结果模型 (MatchResult)
class MatchResult {
  final String text;          // 匹配文本
  final int start;            // 起始位置
  final int end;              // 结束位置
  final List<String> groups;  // 捕获组列表
}
3.1.3 正则模板分布
22% 22% 17% 17% 11% 11% 正则模板分类分布 联系方式 证件号码 网络相关 字符匹配 日期时间 密码验证

3.2 页面结构设计

3.2.1 主页面布局

MainPage

IndexedStack

测试页面

常用正则页面

个人中心

NavigationBar

测试 Tab

常用 Tab

我的 Tab

3.2.2 测试页面结构

测试页面

正则输入区

匹配选项区

测试文本区

匹配结果区

正则表达式输入框

实时验证

忽略大小写

多行模式

点匹配换行

Unicode

文本输入框

粘贴按钮

匹配数量统计

匹配结果卡片

捕获组展示

3.2.3 常用正则页面结构

常用正则页面

分类筛选栏

正则列表

全部

联系方式

证件号码

网络相关

字符匹配

日期时间

密码验证

正则卡片

名称+分类

描述

正则表达式

示例

使用按钮

3.3 正则匹配流程设计

开始测试

正则表达式是否为空?

清空结果

创建RegExp对象

创建是否成功?

显示错误信息

执行allMatches

是否有匹配结果?

显示未匹配提示

遍历匹配结果

提取匹配文本

提取位置信息

提取捕获组

构建MatchResult

更新UI显示


四、UI设计规范

4.1 配色方案

应用采用紫色为主色调,营造专业高效的开发工具氛围:

颜色类型 色值 用途
主色 #673AB7 (Deep Purple) 导航、强调元素
成功色 #4CAF50 (Green) 匹配成功提示
错误色 #F44336 (Red) 正则错误提示
警告色 #FF9800 (Orange) 未匹配提示
代码背景 surfaceContainerHighest 代码输入区域

4.2 字体规范

元素 字号 字重 字体
页面标题 20px Medium 默认
正则表达式 16px Regular monospace
测试文本 14px Regular monospace
匹配结果 14px Medium monospace
捕获组 12px Regular monospace

4.3 组件规范

4.3.1 正则输入框
┌─────────────────────────────────────────────────┐
│ / \d+                                   /       │
│                                                 │
└─────────────────────────────────────────────────┘
4.3.2 匹配选项
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 忽略大小写 ✓ │ │ 多行模式     │ │ Unicode ✓    │
└──────────────┘ └──────────────┘ └──────────────┘
4.3.3 匹配结果卡片
┌─────────────────────────────────────────────────┐
│ 匹配 #1                          位置: 6-9      │
│ ┌─────────────────────────────────────────────┐ │
│ │ 123                                         │ │
│ └─────────────────────────────────────────────┘ │
│ 捕获组                                          │
│ [$1: value1] [$2: value2]                       │
│                                          [复制] │
└─────────────────────────────────────────────────┘
4.3.4 正则模板卡片
┌─────────────────────────────────────────────────┐
│ 手机号码                        [联系方式]      │
│ 匹配中国大陆手机号码                            │
│ ┌─────────────────────────────────────────────┐ │
│ │ ^1[3-9]\d{9}$                               │ │
│ └─────────────────────────────────────────────┘ │
│ 示例: [13812345678]                             │
│                                 [▶ 使用此正则]  │
└─────────────────────────────────────────────────┘

五、核心功能实现

5.1 正则测试核心实现

void _testRegex() {
  setState(() {
    _errorMessage = null;
    _matches = [];
  });

  if (_patternController.text.isEmpty) {
    return;
  }

  try {
    final regex = RegExp(_patternController.text);
    final text = _textController.text;
    final matches = regex.allMatches(text);

    setState(() {
      _matches = matches.map((match) {
        return MatchResult(
          text: match.group(0) ?? '',
          start: match.start,
          end: match.end,
          groups: List.generate(
            match.groupCount + 1, 
            (i) => match.group(i) ?? ''
          ),
        );
      }).toList();
    });
  } catch (e) {
    setState(() {
      _errorMessage = e.toString();
    });
  }
}

5.2 匹配选项实现

Widget _buildFlagsSection() {
  return Column(
    children: [
      _buildFlagChip('忽略大小写', _caseInsensitive, (value) {
        setState(() => _caseInsensitive = value);
        _testRegex();
      }),
      _buildFlagChip('多行模式', _multiline, (value) {
        setState(() => _multiline = value);
        _testRegex();
      }),
      _buildFlagChip('点匹配换行', _dotAll, (value) {
        setState(() => _dotAll = value);
        _testRegex();
      }),
      _buildFlagChip('Unicode (u)', _unicode, (value) {
        setState(() => _unicode = value);
        _testRegex();
      }),
    ],
  );
}

5.3 匹配结果展示实现

Widget _buildMatchCard(int index, MatchResult match) {
  return Card(
    child: Padding(
      padding: const EdgeInsets.all(16),
      child: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            children: [
              Text('匹配 #$index'),
              Text('位置: ${match.start}-${match.end}'),
            ],
          ),
          Container(
            child: SelectableText(
              match.text,
              style: TextStyle(fontFamily: 'monospace'),
            ),
          ),
          if (match.groups.length > 1)
            Wrap(
              children: match.groups.asMap().entries
                .where((e) => e.key > 0)
                .map((e) => Chip(label: Text('\$${e.key}: ${e.value}')))
                .toList(),
            ),
        ],
      ),
    ),
  );
}

5.4 分类筛选实现

List<RegexPattern> get _filteredPatterns {
  if (_selectedCategory == '全部') {
    return _commonPatterns;
  }
  return _commonPatterns.where((p) => p.category == _selectedCategory).toList();
}

5.5 快速应用正则实现

void _applyPattern(RegexPattern pattern) {
  _patternController.text = pattern.pattern;
  _textController.text = pattern.example;
  _testRegex();
}

六、交互设计

6.1 正则测试交互流程

结果区 正则引擎 输入框 用户 结果区 正则引擎 输入框 用户 输入正则表达式 创建RegExp 验证结果 输入测试文本 执行匹配 返回匹配列表 高亮显示结果

6.2 分类筛选交互

联系方式

证件号码

网络相关

字符匹配

日期时间

密码验证

全部

进入常用正则页面

显示全部正则

点击分类标签

显示3个正则

显示4个正则

显示3个正则

显示4个正则

显示2个正则

显示2个正则

6.3 正则应用流程

点击分类标签

点击全部

点击正则卡片

点击使用此正则

跳转并填充

返回

浏览列表

选择分类

查看详情

应用正则

测试页面


七、扩展功能规划

7.1 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 正则测试功能 常用正则库 匹配结果展示 测试历史 收藏功能 自定义正则 正则可视化 代码生成 正则教程 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 正则测试应用开发计划

7.2 功能扩展建议

7.2.1 测试历史

记录测试记录:

  • 保存历史正则表达式
  • 保存历史测试文本
  • 快速恢复历史测试
7.2.2 收藏功能

个人收藏管理:

  • 收藏常用正则
  • 创建自定义分类
  • 导入导出收藏
7.2.3 代码生成

多语言代码生成:

  • 生成Dart代码
  • 生成JavaScript代码
  • 生成Python代码

八、注意事项

8.1 开发注意事项

  1. 正则语法:Dart正则语法与JavaScript基本一致

  2. 捕获组:group(0)返回完整匹配,group(1)开始是捕获组

  3. 特殊字符:需要转义的特殊字符包括 \ ^ $ . | ? * + ( ) [ ] { }

  4. 性能优化:复杂正则可能导致性能问题,需要提示用户

8.2 常见问题

问题 原因 解决方案
正则不匹配 语法错误或边界问题 检查正则语法,注意^和$
捕获组为空 未使用分组语法 使用()创建捕获组
中文匹配失败 未考虑Unicode 开启Unicode选项
换行符不匹配 .不匹配换行 开启dotAll选项

8.3 正则语法速查

📝 正则表达式快速参考 📝

符号 含义 符号 含义
. 任意字符 \d 数字
\w 字母数字下划线 \s 空白字符
^ 行首 $ 行尾
* 0次或多次 + 1次或多次
? 0次或1次 {n} 恰好n次
[] 字符集 () 分组
` ` [^]

九、运行说明

9.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+

9.2 运行命令

# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_regex_tester.dart --web-port 8105

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_regex_tester.dart

# 运行到Windows
flutter run -d windows -t lib/main_regex_tester.dart

# 代码分析
flutter analyze lib/main_regex_tester.dart

十、总结

正则测试应用通过简洁直观的界面设计,为开发者提供了一个高效的正则表达式测试工具。应用涵盖了正则测试、常用正则库、个人中心三大模块,收录了18个常用正则表达式模板,帮助用户快速验证正则表达式、学习正则语法。

核心功能涵盖实时匹配测试、匹配选项设置、结果展示、常用正则库四大模块。正则测试支持实时验证、错误提示、捕获组展示;匹配选项支持忽略大小写、多行模式、点匹配换行、Unicode等设置;常用正则库涵盖六大分类18个模板,支持一键应用;个人中心提供快速参考、学习统计等功能。

应用采用Material Design 3设计规范,以紫色为主色调,界面专业高效。通过本应用,希望能够帮助开发者提高正则表达式的编写效率,快速解决文本处理问题。

正则表达式,文本处理的利器

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐