一、前言
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。 例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
二、Unity使用正则表达式
匹配正整数:
using System.Text.RegularExpressions; using UnityEngine; public class Regex_Test : MonoBehaviour { void Start() { string temp = "123"; Debug.Log(IsNumber(temp)); } ///<summary> ///匹配正整数 ///</summary> ///<param name="strInput"></param> ///<returns></returns> public bool IsNumber(string strInput) { Regex reg = new Regex("^[0-9]*[1-9][0-9]*$"); if (reg.IsMatch(strInput)) { return true; } else { return false; } } } 复制代码
结果:
网络异常,图片无法展示
|
匹配大写字母
using System.Text.RegularExpressions; using UnityEngine; public class Regex_Test : MonoBehaviour { void Start() { string temp = "ABC"; Debug.Log(IsNumber(temp)); } ///<summary> ///匹配由26个英文字母的大写组成的字符串 ///</summary> ///<param name="strInput"></param> ///<returns></returns> public bool IsCapital(string strInput) { Regex reg = new Regex("^[A-Z]+$"); if (reg.IsMatch(strInput)) { return true; } else { return false; } } } 复制代码
结果:
网络异常,图片无法展示
|
三、Regex 类
Regex 类用于表示一个正则表达式。
下表列出了 Regex 类中一些常用的方法:
序号 | 方法 | 描述 |
1 | public bool IsMatch( string input ) | 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
2 | public bool IsMatch( string input, int startat ) | 指示 Regex 构造函数中指定的正则表达式是否在指定的输入字符串中找到匹配项,从字符串中指定的开始位置开始。 |
3 | public static bool IsMatch( string input, string pattern ) | 指示指定的正则表达式是否在指定的输入字符串中找到匹配项。 |
4 | public MatchCollection Matches( string input ) | 在指定的输入字符串中搜索正则表达式的所有匹配项。 |
5 | public string Replace( string input, string replacement ) | 在指定的输入字符串中,把所有匹配正则表达式模式的所有匹配的字符串替换为指定的替换字符串。 |
6 | public string[] Split( string input ) | 把输入字符串分割为子字符串数组,根据在 Regex 构造函数中指定的正则表达式模式定义的位置进行分割。 |
如需了解 Regex 类的完整的属性列表,请参阅微软的 C# 文档。
四、常用正则表达式
^-?\d+$ //匹配整数(包含正负整数) ^(-?\d+)(\.\d+)?$ //匹配浮点数(包含正负浮点数) ^[A-Za-z]+$ //匹配26个英文字母(包含大小写) ^[A-Z]+$ //匹配由26个英文字母(大写) ^[a-z]+$ //匹配由26个英文字母(小写) ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 ^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串 \S{6,} //不能为空 六位以上 [^\x00-\xff] //匹配双字节字符(包括汉字在内) \d+\.\d+\.\d+\.\d+ //匹配ip地址 复制代码
序号 | 代码 | 描述 |
1 | ^\d+$ | 匹配非负整数(正整数 + 0) |
2 | ^[0-9]*[1-9][0-9]*$ | 匹配正整数 |
3 | ^((-\d+)|(0+))$ | 匹配非正整数(负整数 + 0) |
4 | ^-[0-9]*[1-9][0-9]*$ | 匹配负整数 |
5 | ^-?\d+$ | 匹配整数 |
6 | ^\d+(\.\d+)?$ | 匹配非负浮点数(正浮点数 + 0) |
7 | ^(([0-9]+\.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$ | 匹配正浮点数 |
8 | ^((-\d+(.\d+)?)|(0+(.0+)?))$ | 匹配非正浮点数(负浮点数 + 0) |
9 | ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$ | 匹配负浮点数 |
10 | ^(-?\d+)(.\d+)?$ | 匹配浮点数 |
11 | ^[A-Za-z]+$ | 匹配由26个英文字母组成的字符串 |
12 | ^[A-Z]+$ | 匹配由26个英文字母的大写组成的字符串 |
13 | ^[a-z]+$ | 匹配由26个英文字母的小写组成的字符串 |
14 | ^[A-Za-z0-9]+$ | 匹配由数字和26个英文字母组成的字符串 |
15 | ^\w+$ | 匹配由数字、26个英文字母或者下划线组成的字符串 |
16 | ^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$ | 匹配email地址 |
17 | ^[a-zA-z]+://匹配(\w+(-\w+))(.(\w+(-\w+)))(?\S)?$ | 匹配url |
18 | [\u4e00-\u9fa5] | 匹配中文字符的正则表达式 |
19 | [^\x00-\xff] | 匹配双字节字符(包括汉字在内) |
20 | String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;} | 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) |
21 | \n[\s| ]*\r | 匹配空行的正则表达式 |
22 | /<(.*)>.</\1>|<(.) /> | 匹配HTML标记的正则表达式 |
23 | (^\s*)|(\s*$) | 匹配首尾空格的正则表达式 |
五、实例
实例 1 、匹配以 'm' 开头以 'e' 结尾的单词
using System.Text.RegularExpressions; using UnityEngine; public class Regex_Test : MonoBehaviour { void Start() { string temp = "make maze and manage to measure it"; MatchStr(temp); } 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); } } } 复制代码
网络异常,图片无法展示
|
实例2、 替换掉多余的空格
using System.Text.RegularExpressions; using UnityEngine; public class Regex_Test : MonoBehaviour { void Start() { string temp = "Hello World"; MatchStr(temp); } public void MatchStr(string str) { Regex reg = new Regex("\\s+"); Debug.Log(reg.Replace(str, " ")); } } 复制代码
网络异常,图片无法展示
|
实例3、 找到字符串中的数字并返回
using System.Text.RegularExpressions; using UnityEngine; public class Regex_Test : MonoBehaviour { void Start() { string temp = "你好123不好"; MatchStr(temp); } public int MatchStr(string str) { Regex r = new Regex(@"\d+", RegexOptions.IgnoreCase); Match m = r.Match(strNumber); int number = int.Parse(m.Value); return number; } }