当前位置: 首页 > news >正文

正则表达式及其游戏中应用

一、正则表达式基础知识

✅ 什么是正则表达式?

正则表达式是一种用来匹配字符串的规则表达式,常用于搜索、验证、替换等文本处理场景

比如你想找出玩家输入中的邮箱、命令、作弊码……正则就特别好用。


📚 常见语法速查表:

表达式含义示例
.匹配任意字符(除换行)a.c 能匹配 abc
\d匹配一个数字 [0-9]\d+ 匹配数字串
\w匹配字母或数字字符(含下划线)\w+ 匹配变量名
^匹配字符串开始^hello 匹配以 hello 开头的
$匹配字符串结尾end$ 匹配以 end 结尾的
*前面的内容重复 0 次或多次a* 匹配空、a、aa
+重复 1 次或多次a+ 匹配 a、aa
{n}恰好重复 n 次\d{4} 匹配年份
[]匹配字符集合[abc] 匹配 a、b、c
``
()分组(ab)+ 匹配 abab、ab

二、游戏开发中的正则应用

1️⃣ 玩家输入指令解析(命令行游戏常见)

示例: 玩家输入 /give gold 100,你可以用正则来提取命令和参数。

std::regex pattern("^/give\\s+(\\w+)\\s+(\\d+)$");
std::smatch match;
if (std::regex_match(input, match, pattern)) {std::string item = match[1]; // goldint amount = std::stoi(match[2]); // 100
}

2️⃣ 聊天系统中的敏感词过滤

std::string msg = "你个笨蛋";
std::regex badword("(笨蛋|傻瓜|死鬼)");
msg = std::regex_replace(msg, badword, "**");

输出:你个**


3️⃣ 作弊码识别

std::string code = "IDKFA"; // doom秘籍
std::regex cheatCode("^IDKFA$");
if (std::regex_match(code, cheatCode)) {// 激活秘籍
}

4️⃣ 玩家ID、邮箱、昵称格式验证

  • 昵称只能是英文或数字,3~10位:
std::regex namePattern("^[a-zA-Z0-9]{3,10}$");
  • 邮箱格式:
std::regex emailPattern("^[\\w.-]+@[\\w.-]+\\.\\w+$");

三、练习题部分

🧠 理论题

题 1: 正则 ^player\\d{2,4}$ 能匹配以下哪个字符串?

A. player1
B. player999
C. player00000
D. player12

✅ 答案:B、D


💻 编程题

题 2: 实现一个函数,判断用户输入是否是 /attack target_name 的命令格式。

bool isValidAttackCommand(const std::string& input) {std::regex pattern("^/attack\\s+\\w+$");return std::regex_match(input, pattern);
}

四、🎮 小游戏项目:《正则冒险者》

✨ 游戏概念:

玩家在迷宫中通过输入合法的魔法咒语(正则校验)释放技能、解锁门、开启宝箱。


📌 核心逻辑片段:

std::string input;
std::getline(std::cin, input);std::regex openDoor("^open\\s+door(\\d+)$");
std::regex spell("^cast\\s+\\w{3,10}$");
std::regex chest("^unlock\\s+chest_(gold|silver|bronze)$");if (std::regex_match(input, openDoor)) {std::cout << "你打开了一扇门!\n";
} else if (std::regex_match(input, spell)) {std::cout << "你释放了一个神秘法术!\n";
} else if (std::regex_match(input, chest)) {std::cout << "你成功打开了宝箱!\n";
} else {std::cout << "命令无效!请检查语法。\n";
}
http://www.xdnf.cn/news/139231.html

相关文章:

  • 系统架构师2025年论文《论软件架构评估》
  • SecureCRT配置端口转发-通过跳板机SSH到其他服务器
  • Go 语言 TCP 端口扫描器实现与 Goroutine 池原理
  • 【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明
  • 89.WPF 中实现便捷的数字输入框:DecimalUpDown 控件的使用 WPF例子 C#例子.
  • 六个能够白嫖学习资料的网站
  • 一键设置屏幕水印 助力数据安全
  • 知识知多少——Matplotlib 库
  • 【时时三省】Python 语言----函数
  • VSCode 设置源代码根目录
  • 量子威胁下的安全革命:后量子密码学技术路线与迁移挑战全解析
  • Ethan独立开发产品日报 | 2025-04-24
  • 第七讲 | list的使用及其模拟实现
  • TCP协议理解
  • 量子加密通信技术及其应用:构建无条件安全的通信网络
  • 【金仓数据库征文】金仓数据库:国产化浪潮下的技术突破与行业实践
  • 装备制造企业选型:什么样的项目管理系统最合适?
  • Oracle for Linux安装和配置(11)——Oracle安装和配置
  • nc工具!Netcat:TCP/IP瑞士军刀!全参数详细教程!Kali Linux教程!
  • 人工智能常见的数据处理方法
  • 4.1/Q2,Charls最新文章解读
  • springboot如何管理多数据源?
  • SOLID 原则在单片机环境下的 C 语言实现示例,结合嵌入式开发常见场景进行详细说明
  • MySQL8的安装方法
  • 每天学一个 Linux 命令(32):sort
  • Langchain入门介绍
  • Pandas读取Excel文件教程:从入门到精通
  • 内涵:python中的import
  • 国家社科基金项目申请书(课题论证活页)模版分享
  • MySQL索引优化、SQL分析与运行原理 - Java架构师面试实战