Unity3D正则表达式的使用

系列文章目录

unity工具


文章目录

  • 系列文章目录
  • 前言
  • 一、匹配正整数的使用方法
    • 1-1、代码如下
    • 1-2、结果如下
  • 二、匹配大写字母
    • 2-1、代码如下
    • 1-2、结果如下
  • 三、Regex类
    • 3-1、Match()
    • 3-2、Matches()
    • 3-3、IsMatch()
  • 四、定义正则表达式
    • 4-1、转义字符
    • 4-2、字符类
    • 4-3、定位点
    • 4-4、限定符
  • 五、常用的正则表达式
    • 5-1、校验数字的表达式
    • 5-2、校验字符的表达式
    • 5-3、校验特殊需求的表达式
  • 六、正则表达式实例
    • 6-1、匹配字母的表达式
    • 6-2、替换掉空格的表达式
  • 七、完整的测试代码
  • 总结


在这里插入图片描述

前言

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
正则表达式,又称规则表达式,在代码中常简写为regex、regexp,常用来检索替换那些符合某种模式的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。


提示:以下是本篇文章正文内容,下面案例可供参考

unity使用正则表达式

一、匹配正整数的使用方法

1-1、代码如下

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
/// <summary>
/// 匹配正整数
/// </summary>
public class Bool_Number : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        string num = "456";
        Debug.Log("结果是:"+IsNumber(num));
    }

    public bool IsNumber(string strInput)
    {
        Regex reg = new Regex("^[0-9]*[1-9][0-9]*$");
        if (reg.IsMatch(strInput))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

1-2、结果如下

在这里插入图片描述

二、匹配大写字母

检查文本是否都是大写字母

2-1、代码如下

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;
/// <summary>
/// 匹配大写字母
/// </summary>
public class Bool_Majuscule : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        string NUM = "ABC";
        Debug.Log("NUM结果是:" + IsCapital(NUM));
        string num = "abc";
        Debug.Log("num结果是:" + IsCapital(num));
    }

    public bool IsCapital(string strInput)
    {
        Regex reg = new Regex("^[A-Z]+$");
        if (reg.IsMatch(strInput))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

1-2、结果如下

在这里插入图片描述

三、Regex类

正则表达式是一种文本模式,包括普通字符和特殊字符,正则表达式使用单个字符描述一系列匹配某个句法规则的字符串 常用方法如下在这里插入图片描述
如需了解更详细文档请参考:https://www.runoob.com/csharp/csharp-regular-expressions.html

3-1、Match()

测试代码如下

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;

public class Bool_Regex_Match : MonoBehaviour
{
    void Start()
    {
        string temp = "aaaa(bbb)cccccc(dd)eeeeee";
        IsMatch(temp);
    }
    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch(string strInput)
    {
        string pattern = "\\(\\w+\\)";
        Match result = Regex.Match(strInput, pattern);
        Debug.Log("第一种重载方法:" + result.Value);
        Match result2 = Regex.Match(strInput, pattern, RegexOptions.RightToLeft);
        Debug.Log("第二种重载方法:" + result2.Value);
    }

}

测试结果
在这里插入图片描述

3-2、Matches()

代码如下:

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;

public class Bool_Regex_Matches : MonoBehaviour
{
    void Start()
    {
        string temp = "aaaa(bbb)aaaaaaaaa(bb)aaaaaa";
        IsCapital(temp);
    }
    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsCapital(string strInput)
    {
        string pattern = "\\(\\w+\\)";
        MatchCollection results = Regex.Matches(strInput, pattern);
        for (int i = 0; i < results.Count; i++)
        {
            Debug.Log("第一种重载方法:" + results[i].Value);
        }
        MatchCollection results2 = Regex.Matches(strInput, pattern, RegexOptions.RightToLeft);
        for (int i = 0; i < results.Count; i++)
        {
            Debug.Log("第二种重载方法:" + results2[i].Value);
        }
    }
}

结果如下
在这里插入图片描述

3-3、IsMatch()

代码如下:

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;

public class Bool_Regex_IsMatch : MonoBehaviour
{
    void Start()
    {
        string temp = "aaaa(bbb)cccccc(dd)eeeeeeee";
        IsMatch(temp);
    }
    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch(string strInput)
    {
        string pattern = "\\(\\w+\\)";
        bool resultBool = Regex.IsMatch(strInput, pattern);
        Debug.Log(resultBool);
        bool resultBool2 = Regex.IsMatch(strInput, pattern, RegexOptions.RightToLeft);
        Debug.Log(resultBool2);
    }
}

结果如下
在这里插入图片描述

四、定义正则表达式

4-1、转义字符

总结:在这里插入图片描述

方法如下:

  ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (转义字符)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch(string strInput)
    {
        string pattern = "\\r\\n(\\w+)";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

4-2、字符类

总结:
在这里插入图片描述

方法如下:

  ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项 (字符类)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_1(string strInput)
    {
        string pattern = "(\\d+)";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

4-3、定位点

正则表达式中的定位点可以设置匹配字符串的索引位置,所以可以使用定位点对要匹配的字符进行限定,以此得到想要匹配到的字符串
总结:在这里插入图片描述
方法代码如下:

 ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项 (定位点)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_2(string strInput)
    {
        string pattern = "(\\w+)$";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

4-4、限定符

正则表达式中的限定符指定在输入字符串中必须存在上一个元素的多少个实例才能出现匹配项
在这里插入图片描述
方法如下:

 ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (限定符)
    ///</summary> 
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_3(string strInput)
    {
        string pattern = "\\w{5}";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

五、常用的正则表达式

5-1、校验数字的表达式

代码如下:

  ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (常用的校验数字表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_4(string strInput)
    {
        Regex reg = new Regex(@"^[0-9]*$");
        bool result = reg.IsMatch(strInput);
        Debug.Log(result);
    }

5-2、校验字符的表达式

字符如果包含汉字 英文 数字以及特殊符号时,使用正则表达式可以很方便的将这些字符匹配出来
代码如下:

///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (常用的校验字符表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_5(string strInput)
    {
        Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]");
        bool result = reg.IsMatch(strInput);
        Debug.Log("匹配中文、英文和数字:" + result);
        Regex reg2 = new Regex(@"^[A-Za-z0-9]");
        bool result2 = reg2.IsMatch(strInput);
        Debug.Log("匹配英文和数字:" + result2);
    }

5-3、校验特殊需求的表达式

方法如下:

 ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (常用的校验特殊需求的表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_6()
    {
        Regex reg = new Regex(@"[a-zA-z]+://[^\s]*");
        bool result = reg.IsMatch("http://www.baidu.com");
        Debug.Log("匹配网址:" + result);
        Regex reg2 = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
        bool result2 = reg2.IsMatch("13512341234");
        Debug.Log("匹配手机号码:" + result2);
    }

六、正则表达式实例

(经常用到的)

6-1、匹配字母的表达式

开发中经常要用到以某个字母开头或某个字母结尾的单词

下面使用正则表达式匹配以m开头,以e结尾的单词
代码如下:

///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (匹配以m开头,以e结尾的表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void MatchStr(string str)
    {
        Regex reg = new Regex(@"\bm\S*e\b");
        MatchCollection mat = reg.Matches(str);
        foreach (Match item in mat)
        {
            Debug.Log(item);
        }
    }

6-2、替换掉空格的表达式

项目中,总会遇到模型名字上面有多余的空格,有时候会影响查找,所以下面演示如何去掉多余的空格
代码如下:

  ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (去掉多余的空格的表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_8(string str)
    {
        Regex reg = new Regex("\\s+");
        Debug.Log(reg.Replace(str, " "));
    }

七、完整的测试代码

代码如下:

using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using UnityEngine;

public class Bool_Definition : MonoBehaviour
{
    void Start()
    {
        #region 转义字符测试
        string temp = "\r\nHello\nWorld.";
        IsMatch(temp);
        #endregion
        #region 字符类测试
        string temp1 = "Hello World 2024";
        IsMatch_1(temp1);
        #endregion

        #region 定位点测试
        string temp2 = "Hello World 2024";
        IsMatch_2(temp2);
        #endregion

        #region 限定符测试
        string temp3 = "Hello World 2024";
        IsMatch_3(temp3);
        #endregion

        #region 校验数字测试
        string temp4 = "2024";
        IsMatch_4(temp4);
        #endregion

        #region 校验字符测试
        string temp5 = "你好,时间,2024";
        IsMatch_5(temp5);
        #endregion

        #region 校验特殊需求测试      
        IsMatch_6();
        #endregion

        #region 匹配字母实例测试    
        string temp7 = "make mave move and to it mease";
        IsMatch_7(temp7);
        #endregion

        #region 去掉空格实例测试    
        string temp8 = "GOOD     2024";
        IsMatch_8(temp8);
        #endregion
    }
    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (转义字符)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch(string strInput)
    {
        string pattern = "\\r\\n(\\w+)";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }


    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项 (字符类)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_1(string strInput)
    {
        string pattern = "(\\d+)";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项 (定位点)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_2(string strInput)
    {
        string pattern = "(\\w+)$";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (限定符)
    ///</summary> 
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_3(string strInput)
    {
        string pattern = "\\w{5}";
        Match resultBool = Regex.Match(strInput, pattern);
        Debug.Log(resultBool.Value);
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (常用的校验数字表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_4(string strInput)
    {
        Regex reg = new Regex(@"^[0-9]*$");
        bool result = reg.IsMatch(strInput);
        Debug.Log(result);
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (常用的校验字符表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_5(string strInput)
    {
        Regex reg = new Regex(@"^[\u4E00-\u9FA5A-Za-z0-9]");
        bool result = reg.IsMatch(strInput);
        Debug.Log("匹配中文、英文和数字:" + result);
        Regex reg2 = new Regex(@"^[A-Za-z0-9]");
        bool result2 = reg2.IsMatch(strInput);
        Debug.Log("匹配英文和数字:" + result2);
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (常用的校验特殊需求的表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_6()
    {
        Regex reg = new Regex(@"[a-zA-z]+://[^\s]*");
        bool result = reg.IsMatch("http://www.baidu.com");
        Debug.Log("匹配网址:" + result);
        Regex reg2 = new Regex(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
        bool result2 = reg2.IsMatch("13512341234");
        Debug.Log("匹配手机号码:" + result2);
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (匹配以m开头,以e结尾的表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_7(string str)
    {
        Regex reg = new Regex(@"\bm\S*e\b");
        MatchCollection mat = reg.Matches(str);
        foreach (Match item in mat)
        {
            Debug.Log(item);
        }
    }

    ///<summary>
    ///在输入的字符串中搜索正则表达式的匹配项  (去掉多余的空格的表达式)
    ///</summary>
    ///<param name="strInput">输入的字符串</param>
    public void IsMatch_8(string str)
    {
        Regex reg = new Regex("\\s+");
        Debug.Log(reg.Replace(str, " "));
    }

}

总结

以后有更好用的会继续补充
不定时更新Unity开发技巧,觉得有用记得一键三连哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359410.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React、React Router、JSX 简单入门快速上手

React、React Router、JSX 简单入门快速上手 介绍特点 JSX使用js表达式渲染列表样式控制注意事项 入门脚手架创建react项目安装目录介绍入口文件解析 组件解析介绍函数式组件类组件 事件绑定注意点定义使用事件对象事件处理函数接收额外参数 组件状态状态的定义使用 组件通信父…

探索水下低光照图像检测性能,基于YOLOv7【tiny/l/x】不同系列参数模型开发构建海底生物检测识别分析系统

海底这类特殊数据场景下的检测模型开发相对来水比较少&#xff0c;在前面的博文中也有一些涉及&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《尝试探索水下目标检测&#xff0c;基于yolov5轻量级系列模型n/s/m开发构建海底生物检测系统》 《基于YOLOv5C3CBAMCBA…

ElementUI Form:Radio 单选框

Radio 单选框 点击下载learnelementuispringboot项目源码 效果图 el-radio.vue 页面效果图 项目里el-radio.vue代码 <script> export default {name: el_radio,data() {return {radio: 1,radio2: 2,radio3: 3,radio4: 上海,radio5: 上海,radio6: 上海,radio7: 上海,r…

微信小程序如何实现点击上传图片功能

如下所示,实际需求中常常存在需要点击上传图片的功能,上传前显示边框表面图片显示大小,上传后将图形缩放到边框大小。 实现如下: .wxml <view class="{{img_src==?blank-area:}}" style="width:100%;height:40%;display:flex;align-items: center;jus…

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录 1 -> 引用 1.1 -> 引用概念 1.2 -> 引用特性 1.3 -> 常引用 1.4 -> 使用场景 1.5 -> 传值、传引用效率比较 1.6 -> 值和引用作为返回值类型的性能比较 1.7 -> 引用和指针的区别 2 -> 内联函数 2.1 -> 概念 2.2 -> 特性 3 -…

聊聊DoIP吧

DoIP是啥? DoIP代表"Diagnostic over Internet Protocol",即互联网诊断协议。它是一种用于在车辆诊断中进行通信的网络协议。DoIP的目标是在现代汽车中实现高效的诊断和通信。通过使用互联网协议(IP)作为通信基础,DoIP使得诊断信息能够通过网络进行传输,从而提…

Uniapp小程序端打包优化实践

背景描述&#xff1a; 在我们最近开发的一款基于uniapp的小程序项目中&#xff0c;随着功能的不断丰富和完善&#xff0c;发现小程序包体积逐渐增大&#xff0c;加载速度也受到了明显影响。为了提升用户体验&#xff0c;团队决定对小程序进行一系列打包优化。 项目优化点&…

近期作业总结(函数,递归,二进制)

二分查找函数 写一个二分查找函数 功能&#xff1a;在一个升序数组中查找指定的数值&#xff0c;找到了就返回下标&#xff0c;找不到就返回-1。 int bin_search(int arr[], int left, int right, int key) {int mid 0;while (left < right) {mid (right left) / 2;if…

Labview 图像处理系统设计

1. 总体主界面设计 前面板界面如下&#xff1a; 界面总共分为一个实时采集加拍照控制模块&#xff0c;两个图像显示模块&#xff08;实时图像显示和直方图显示&#xff09;以及三个图像处理模块 前面板中各模块具体功能及使用说明如下&#xff1a; 1.当实时按钮关闭时&#x…

代码随想录day15--二叉树的应用3

LeetCode110--平衡二叉树 题目描述&#xff1a; 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a…

Kotlin快速入门系列8

Kotlin的泛型 与Java一样&#xff0c;Kotlin也提供泛型。泛型&#xff0c;即 "参数化类型"&#xff0c;将类型参数化&#xff0c;可以用在类&#xff0c;接口&#xff0c;方法上。可以为类型安全提供保证&#xff0c;消除类型强转的烦恼。声明泛型类的格式如下&…

《CSS3》田字网格背景(外实线内虚线)的实现

一、前言 记录一些有趣的CSS实现方式&#xff0c;总所周知&#xff0c;当一段效果可以通过CSS实现的时候&#xff0c;绝不使用Javascript来实现&#xff0c;因此记录一些有意思的CSS效果&#xff0c;一来是方便自己学习&#xff0c;另一来是方便以后在需要使用到的时候能快速找…

基于yolov2深度学习网络的视频手部检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 输入mp4格式的视频文件进行测试&#xff0c;视频格式为1080p30. 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..........................…

burp靶场--xss下篇【16-30】

burp靶场–xss下篇【16-30】 https://portswigger.net/web-security/all-labs#cross-site-scripting 实验16&#xff1a;允许使用一些 SVG 标记的反射型 XSS ### 实验要求&#xff1a; 该实验室有一个简单的反射型 XSS漏洞。该网站阻止了常见标签&#xff0c;但错过了一些 S…

win wsl2 Ubuntu-22.04 设置时间为国内时间

使用 wsl2 安装 Ubuntu-22.04 后 时间不正确&#xff0c;主要有两个原因 时区设置不正确&#xff0c;国内为京八区。 时区正确后&#xff0c;没有同步时间。&#xff08;大部分人容易忽略这一点&#xff09; Linux 默认情况下使用 UTC 格式作为标准时间格式&#xff0c;如果在…

云原生Kubernetes: Ubuntu 安装 K8S 1.23版本(单Master架构) 及故障恢复

目录 一、实验 1.环境 2.安装 Ubuntu 3.连接Ubuntu 4.master节点安装docker 5.node节点安装docker 6.master节点安装K8S 7.添加K8S工作节点 8.安装网络插件calico 9.故障 10.故障恢复 11.测试k8s网络和coredns 二、问题 1.Ubuntu如何修改镜像源 2.Ubuntu和Windo…

STM32F407移植OpenHarmony笔记3

接上一篇&#xff0c;搭建完环境&#xff0c;找个DEMO能跑&#xff0c;现在我准备尝试从0开始搬砖。 首先把/device和/vendor之前的代码全删除&#xff0c;这个时候用hb set命令看不到任何项目了。 /device目录是硬件设备目录&#xff0c;包括soc芯片厂商和board板级支持代码…

Qt 基础之QDataTime

Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…

华为——NGFW Module安装在集群交换机上,二层双机负载分担部署,交换机重定向引流

NGFW Module安装在集群交换机上&#xff0c;二层双机负载分担部署&#xff0c;交换机重定向引流 业务需求 如图1所示&#xff0c;两台交换机集群组网&#xff0c;两块NGFW Module分别安装在两台交换机的1号槽位组成双机负载分担组网。NGFW Module工作在二层&#xff0c;也就是…

FileViewer纯前端预览项目Vue2 demo

FileViewer 项目Vue2 demo 本demo基于vue-clijsvue2.x构建&#xff0c;如果您需要vue3版本的demo&#xff0c;请前往main分支。 适用于Vue2 Webpack&#xff0c;本集成方法要求最低Webpack版本为5&#xff0c;也就是Vue Cli Service 5.0.0以上&#xff0c;当然&#xff0c;if…