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

相关推荐
程序员云帆哥6 分钟前
MySQL JDBC Driver URL参数配置规范
数据库·mysql·jdbc
TDengine (老段)23 分钟前
TDengine 数学函数 FLOOR 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
大气层煮月亮1 小时前
Oracle EBS ERP开发——报表生成Excel标准模板设计
数据库·oracle·excel
云和数据.ChenGuang1 小时前
达梦数据库的命名空间
数据库·oracle
星河队长2 小时前
VS创建C++动态库和C#访问过程
java·c++·c#
三三木木七2 小时前
mysql拒绝连接
数据库·mysql
蹦跶的小羊羔2 小时前
sql数据库语法
数据库·sql
唐古乌梁海2 小时前
【mysql】InnoDB的聚簇索引和非聚簇索引工作原理
数据库·mysql
我变秃了也没变强2 小时前
pgsql配置密码复杂度策略
数据库·postgresql
PawSQL2 小时前
企业级SQL审核工具PawSQL介绍(1) - 六大核心能力
数据库·sql·oracle