亲手一个个测试过的噢
using UnityEngine;
using System.Collections;
using System.Text.RegularExpressions;
public class testRegex : MonoBehaviour
{
public UILabel m_uiLabelOld = null;
public UILabel m_uiLabelNew = null;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
}
void OnGUI()
{
if(GUILayout.Button("aa"))
{
OnExample2();
}
}
//简单使用举例
private void OnSimpleUse1()
{
string strMsg = "abc123ABC456aBc";
Regex reg = new Regex("abc",RegexOptions.IgnoreCase);//匹配字符串abc
bool bIsMatch = reg.IsMatch(strMsg);//是否有找到匹配项
Match match = reg.Match(strMsg);//在该字符串中,搜索到的第一个匹配项
MatchCollection matchs = reg.Matches(strMsg);//在该字符串中,搜索到的所有匹配项
string newStr = reg.Replace(strMsg, ",");//替换匹配项为替换字符,返回新字符串
}
//举例1
private void OnExample1()
{
string strMsg = "abc123ABC456aBc123abcabc";
//strMsg = "abc\n123abc";
//strMsg = "a b c\f";//
//strMsg = "\f a b c\n\r\t";//测试\s 匹配任何空白符用的
//strMsg = "plainb";
strMsg = "hello";
//匹配模式
string strPattern = "";
//匹配单个字符 中括号范围中的每一个单个字符都会匹配,不是按一个整体匹配,是按单个字符
strPattern = "[1]";
strPattern = "[0-9]";
strPattern = "[acB]";
strPattern = "[a-z]";
strPattern = "[A-Z]";
//@的作用
//加了@字符串里可以直接转义“\”,否则需要添加转义字符“\” 需要这样写“\\”
//例如:
//string strTemp = "\d";//错误
//string strTemp = @"\d";//正确
//string strTemp = "\\d";//正确
//string strTemp = "\";//错误
//string strTemp = "\\";//正确 代表字符串一个反斜杠 可以自己输出验证一下
//转义字符 特殊匹配符
strPattern = @"\d";//匹配数字 等价于[0-9]
strPattern = @".";//匹配除“\n”之外的任何单个字符
strPattern = @"(abc)*";//匹配前面的零次或多次的子表达式 经过测试输出的效果,不是很理解 需要继续测试 比如 这个表达式来匹配“hello”也可以匹配成功
strPattern = @"(abc)+";//匹配前面的一次或多次的子表达式 经过测试这个就是字面上表达的意思,这个就是匹配abc这个字符串整体一次或多次
strPattern = @"\f";//匹配一个换页符
strPattern = @"\n";//匹配一个换行符
strPattern = @"\r";//匹配一个回车符
strPattern = @"\s";//匹配任何空白字符,包括空格、制表符、换页符、换行符、回车符等
strPattern = @"(abc)";//(pattern)匹配pattern并获取这一匹配 这个就是匹配abc这个字符串,abc是一个整体
strPattern = @"abc";//这个跟使用括号是一样的 匹配abc这个字符串,abc是一个整体
strPattern = @"(abc)(123)";//这个相当于匹配(abc123) 匹配abc123这个字符串
strPattern = @"(abc)|(123)";//x|y 匹配x或y
strPattern = @"abc|123";
//此匹配模式数据源为 strMsg = "abc123ABC456aBc123abcabc"
//{n} n是一个非负整数,匹配前面的n次子表达式 相当于把前面的子表达式叠加在一起形成一个表达式,而不是说匹配几次的意思,不要理解错了
strPattern = @"(abca){1}";//这个是匹配(abca)一次,这个可以在数据源中能匹配到
strPattern = @"(abca){2}";//这个是匹配(abca)两次 相当于是匹配(abcaabca) 这个在数据源中是匹配不到的
//^匹配开始位置
strPattern = @"^[a]";//这个就是匹配数据源字符串的开头必须是以a这个字母开头才会匹配成功,否则就是匹配失败 而匹配的也仅仅是数据源开头的第一个单个字符而已
strPattern = @"^[a-z]";//这个就是匹配开头必须是a-z中任意一个字母开头的才行,而匹配的也仅仅是数据源开头的第一个单个字符而已
strPattern = @"^(abc)";//匹配项是数据源开头是不是abc这个字符串,如果匹配成功,替换的数据也仅仅是数据源的开头abc这个字符串
//请注意如果^这个符号放在中括号内就产生了不一样的意义
strPattern = @"[^a]";//除了a以外的任意单个字符
strPattern = @"[^a-z]";//除了a-z这个范围以外的任意单个字符
strPattern = @"[^abc]";//除了a或b或c以外的任意单个字符 例如 “[^abc]” 可以匹配 “plainb” 中的p和l和i和n 就是除了a或b之外的任意单个字符
strPattern = @"(^abc)";//这个等价跟上面那个@"^(abc)"
Regex reg = new Regex(strPattern);
bool bIsMatch = reg.IsMatch(strMsg);//是否有找到匹配项
string newStr = reg.Replace(strMsg, ",");//替换匹配项为替换字符,返回新字符串
Debug.Log(bIsMatch);
Debug.Log(newStr);
m_uiLabelOld.text = strMsg;
m_uiLabelNew.text = newStr;
}
//匹配数字,举例
private void OnExample2()
{
string strMsg = "abc123ABC456aBc123abcabc[456]";
string strPattern = @"[0-9]";//这个匹配的是任意一个单个是数字的都会被匹配到
strPattern = @"(\[)(\d+)(\])";//这个匹配的是一个组合的字符串,“[” “任意数字,而且是一个或多个” “]” 由这个三个部分组成的一个完整的字符串 ,这个数据源中匹配的只有一处
strPattern = @"(\d+)";//这个匹配的是 一个或多个数字组合而成的一个字符串 这个数据源中匹配的有四处
Regex reg = new Regex(strPattern);
bool bIsMatch = reg.IsMatch(strMsg);//是否有找到匹配项
string newStr = reg.Replace(strMsg, ",");//替换匹配项为替换字符,返回新字符串
Debug.Log(bIsMatch);
Debug.Log(newStr);
m_uiLabelOld.text = strMsg;
m_uiLabelNew.text = newStr;
}
}