Unity3D正则表达式的使用

系列文章目录

unity工具


文章目录


前言

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

正则表达式,又称规则表达式,在代码中常简写为regex、regexp,常用来检索替换那些符合某种模式的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。


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

unity使用正则表达式

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

1-1、代码如下

csharp 复制代码
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、代码如下

csharp 复制代码
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()

测试代码如下

csharp 复制代码
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()

代码如下:

csharp 复制代码
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()

代码如下:

csharp 复制代码
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、转义字符

总结:

方法如下:

csharp 复制代码
  ///<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、字符类

总结:

方法如下:

csharp 复制代码
  ///<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、定位点

正则表达式中的定位点可以设置匹配字符串的索引位置,所以可以使用定位点对要匹配的字符进行限定,以此得到想要匹配到的字符串

总结:

方法代码如下:

csharp 复制代码
 ///<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、限定符

正则表达式中的限定符指定在输入字符串中必须存在上一个元素的多少个实例才能出现匹配项

方法如下:

csharp 复制代码
 ///<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、校验数字的表达式

代码如下:

csharp 复制代码
  ///<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、校验字符的表达式

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

代码如下:

csharp 复制代码
///<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、校验特殊需求的表达式

方法如下:

csharp 复制代码
 ///<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结尾的单词

代码如下:

csharp 复制代码
///<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、替换掉空格的表达式

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

代码如下:

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

七、完整的测试代码

代码如下:

csharp 复制代码
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开发技巧,觉得有用记得一键三连哦。

相关推荐
simpleGq几秒前
Redis知识点整理 - 脑图
数据库·redis·缓存
NiNg_1_2348 分钟前
关系型数据库和非关系型数据库详解
数据库·oracle·nosql
paopaokaka_luck9 分钟前
基于Spring Boot+Vue的多媒体素材管理系统的设计与实现
java·数据库·vue.js·spring boot·后端·算法
python资深爱好者14 分钟前
NoSQL数据库与关系型数据库的主要区别
数据库·oracle·nosql
sj116373940319 分钟前
Kafka参数了解
数据库·分布式·kafka
虾球xz29 分钟前
游戏引擎学习第10天
学习·游戏引擎
日里安1 小时前
8. 基于 Redis 实现限流
数据库·redis·缓存
机器人天才一号2 小时前
C#从入门到放弃
开发语言·c#
吾与谁归in2 小时前
【C#设计模式(10)——装饰器模式(Decorator Pattern)】
设计模式·c#·装饰器模式
EasyCVR2 小时前
ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案
服务器·网络·数据库·音视频