//1.正则表达式由普通字符和特殊字符(又称元字符)组成的文字模式,是一个模板
// 常用元符号示例:^ . \ *+ ? { 、} ( 、 ) [ 、 ] | $
// ★★★这些元符号都有其特殊含义,如果要表示其本来字符的含义,需要在元符号前加上"\"来转义
// 如,“^\\+?[1-9] [0-9]*$”,匹配正号或没有正号开头,含有0个或n个数字的字符串:
// \\+表示正号,\也是元字符,所以要表示\本来的意思,必须再加一个\,即\\; ?匹配正号0次或1次,*匹配0-9数字0次或n次
/*预定义字符类
* . 匹配除终止符意外的任何单字符 "s.n"匹配 “son” “san” "sen"
* \d 数字0-9 等价于[0-9]
* \D 非数字 等价于[^0-9]
* \w 字符a-zA-Z0-9 等价于[a-zA-Z0-9]
* \W 非字符 等价于[a-zA-Z0-9]
* \s 空白字符 等价于[\r\t\n\v\f]
* \S 非空白字符 等价于[^\r\t\n\v\f]
*/
//边界匹配符:
//行开始 ^ ^a匹配“abc”中的a
//$行结束 "c$"匹配"abc"中的c
//重复限定符:
//X? X重复0或1次 等价于X{0,1}
//X* X重复0次或多次 等价于X{0,}
//X+ X重复一次或多次 等价于X{1,}
//X{n} X重复n次 等价于X{n}
//X{n,} X至少重复n次 等价于X{n,}
//X{n,m} X重复n~m次 等价于X{n,m}
//匹配算法:贪婪算法返回了一个最左边的最长的匹配。如果在重复限定符后面加后缀“?”,则正则表达式引擎使用懒惰性匹配算法
//选择分支:正则表达式中“|”表示选择。用于选择符匹配多个可能的正则表达式中的一个,如“red | green | blue”
//分组:重复限定符重复前导字符,如果需要重复多个字符,则需要把正则表达式的一部分放在圆括号()内,形成分组
//举个栗子 :(\d{1,3}\.){3}匹配ddd.ddd.ddd
static void Main(string[] args){//正则表达式用途1,匹配字符串string pattern_regex = "^[0-9]{6}";bool b = Regex.IsMatch("123456", pattern_regex);pattern_regex = "^z|food$"; //匹配以z打头,或food结尾的字符串,这两个条件满足一个即为true,注意,模板表达式中不能有空格,否则也会将空格匹配进来bool bl = Regex.IsMatch("zfoo", pattern_regex);//以z开头,truebl = Regex.IsMatch("yfood", pattern_regex);//以food结尾,truebl = Regex.IsMatch("yood", pattern_regex);//falsepattern_regex = @"^(z|f)\w*d$";//匹配以z或f打头,后米可以含或不含数字字符汉字,并以d结束的字符串bl = Regex.IsMatch("zood", pattern_regex);bl = Regex.IsMatch("foodasd", pattern_regex);bl = Regex.IsMatch("food", pattern_regex);//返回false,因为模板中起码包含 foodfood或zoodfoodbl = Regex.IsMatch("zoodadsfasdffood", pattern_regex);//匹配IP地址 192.168.210.123//元字符本身可以表示其特殊含义,如果在pattern中要表示其字符自身的匹配,则加\\或 @"\.",如\\. @"\."//预定义字符类,需要在字母前加\\才能起到作用,如\\d,表示0-9的数字,若pattern中匹配字符d本身,则直接写d就可以了string pat = "^([0-9]{1,3}\\.){3}[0-9]{1,3}$";bl = Regex.IsMatch("192.168.210.36", pat);pat = @"^(\d{1,3}\.){3}\d{1,3}$"; //@加了@转义就不起作用了,\表示其本意bl = Regex.IsMatch("1.1.2.3", pat);//判断是否是合法的日期格式2020-01-29pat = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$";bl = Regex.IsMatch("2020-12-30", pat);//正则表达式用途2,从字符串中查找匹配的子字符串string txtcontent = File.ReadAllText("update.txt");//匹配字符串中所有符合要求的已释放版本信息,注意查找匹配的字符串不能有开始结束符MatchCollection mc = Regex.Matches(txtcontent, "Release (\\d{1,2}\\.){3}\\d{1,2}");List<string> lst_ver = new List<string>();foreach (Match match in mc){lst_ver.Add(match.Value);}}