当前位置: 首页 > 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";
}

相关文章:

  • 【设计】接口幂等性设计
  • SQLite 是什么?
  • 28、.NET 中元数据是什么?
  • maxscript根据音频创建动画表情
  • 闻性与空性:从耳根圆通到究竟解脱的禅修路径
  • Django【应用 01】django-plotly-dash安装及使用
  • 学硕热度下降,25西电数学与统计学院(考研录取情况)
  • Electron Forge【实战】阿里百炼大模型 —— AI 聊天
  • Flink checkpoint问题排查指南
  • 如何修复宝可梦时时刻刻冒险无法正常工作
  • CuML + Cudf (RAPIDS) 加速python数据分析脚本
  • 26考研 | 王道 | 数据结构笔记博客总结
  • Flink TaskManager详解
  • 力扣DAY68 | 热100 | 寻找两个正序数组的中位数
  • 使用npm install或cnpm install报错解决
  • 从 “制造” 到 “品牌”:官网建设助力中国企业突围东南亚
  • netcore8.0项目发布到centos,利用nginx反向代理(宝塔面板篇)
  • 【服务器操作指南】从 Hugging Face 上下载文件 | 从某一个网址上下载文件到 Linux 服务器的指定目录
  • STM32F103C8T6信息
  • 数据可视化平台产品介绍及功能特色
  • 加拿大温哥华发生驾车冲撞人群事件,加拿大总理发声
  • 中国人民银行行长潘功胜会见世界银行行长彭安杰
  • 内蒙古纪检干部刘占波履新呼和浩特,曾参与涉煤腐败倒查20年工作
  • 体育公益之约跨越山海,雪域高原果洛孕育足球梦
  • 金隅集团:今年拿地将选择核心热门地块,稳健审慎投资
  • 为何不当教练转型高校管理岗?苏炳添曾吐露过真实的想法