/* 元字符
* .:表示匹配除了\n之外的所有单个字符
* 如a.b:在a与b之间与一个任意的单个字符
*
* []:字符组,表示任意的单个字符,用中括号汇总的字符来匹配
* a[0-9]b:表示0到9之间的任意一个字符
* a[a-zA-Z]b:表示任意的一个字符,这个字符可以不区分大小写
* a[a-zA-Z0-9]b:表示任意的一个字符,这个字符是a-z之间不区分大小写的字符也可以是数字
* a[a-zA-Z0-9!#]b:表示任意的一个字符,这个字符是a-z之间不区分大小写的字符也可以是数字,或者是!或者是#
* a[a-z]b:表示任意的一个字符,这个字符只能是小写的a-z之间的字符
* a[a-z][A-Z]b:表示有两个字符,第一个字符是小写的,第二个字符是大写的
* a[abc.]b:表示有一个字符,科室是abc也可以是.;这里也可以加上转义字符写成a[abc\.]b,在这里如果.出现在中括号中就表示一个普通的.
*
* |:表示或,他的优先级比较低,会放到最后计算
* a(x|y)b:在ab之间有一个字符,这个字符可以是x也可以是y
* z|food:匹配的是z或者是food
*
* -:连接字符
* a[0-9]b:表示ab之间有一个字符,这个字符是0到9之间的数字,如果不适用连接字符也可以写作a[0123456789]b,但是这样太麻烦
*
* {}:表示前面表达式出现的次数
* {n}:表示前面的表达式必须出现n次,不能多也不能少
* {n,}:表示前面的表达式最少出现n从,上不封顶
* {n,m}:表示前面的表达式至少出现n次,最多出现m次
* a[a-zA-Z][a-zA-Z][a-zA-Z]b:表示ab之间有3个字符,这个字符是不区分大小写的英文字母,可以简写成a[a-zA-Z]{3}b
*
* *:表示出现0次货多次,等价于{0,}
* +:表示出现一次或多次,等价于{1,}
* ?:表示出现0次或者一次,等价于{0,1},最多一次可以不出现
* ?也可以终止贪婪模式
* 例如:颜色的英式写法和美式写法为color/colour,这里可以写成colou?r,表示字母u出现0次或者1次,这样就可以匹配英式和美式的单词颜色
*
*
* ^: 表示字符串的开始,也表示取反
* ^hello:表示以h开头,并且后面要跟ello,也可以表述为以hello开头
* a[0-9]b:表示ab中有一个0到9的数字
* a[^0-9]b:表示ab中有一个非0到9的数字
*
* $:表示字符串的结尾
* abc$:表示必须以abc结尾的字符串,也可以理解为必须以c结尾并且前面要跟ab
*
* 简写表达式
* 应为电脑使用的是unicode编码,所以在用\d匹配数字的时候,是可以匹配全角的,如果改成ASCII就不能匹配全角了
* \w也可以用来匹配汉字
* \d:表示数字,这里也可以取全角的数字,[0-9]是有区别的,[0-9]只能匹配半角数字
* \D:表示数字的取反
*
* \s:表示所有的空白符,空格,制表符等
* \S:表示\s的反面
*
* \w:一般表示[a-zA-Z0-9],这里也可以取汉字
* \W:\w的反面
*
* \b;表示单词的边界
* welcome to china: 这里没有把come识别为一个单词而是吧wolcome识别为一个单词就是应为单词边界
*
* 表示所有字符
* [\s\S] 或者[\w\W] 都表示全部字符,等同于.与\n一起的效果
*
*
*
*
*
*
*
*/
public static void GetZF()
{
//邮政编码
//IsMatch表示只要整个字符串中包含需要匹配的信息就会返回true
//bool result = Regex.IsMatch("", "[0-9]{6}");
//如果想要全部匹配需要加上起始和终结符,要求笔试是6个数字开头并且以6个数字结尾,限定完全匹配6个数字
//bool result = Regex.IsMatch("", "^[0-9]{6}$");
//匹配半角和全角的数字
//bool result = Regex.IsMatch("", @"^\d{6}$");
//RegexOptions.ECMAScript参数表示按照ASCII来进行匹配,这样会过滤掉全角数字
//bool result = Regex.IsMatch("", @"^\d{6}$", RegexOptions.ECMAScript);
//下面的返回结果为true,表达式表示的意思是以z开头或者以food结尾
//这是应为|的优先级很低,是放在最后计算的
//string str = "zood";
//bool result = Regex.IsMatch(str, "^z|food$");
//这里返回的是false,应为()改变了优先级,这里表示z或者food,是完全匹配的
//这里只有z和food这两种情况,等价于^z$|^food$
//string str = "zood";
//bool result = Regex.IsMatch(str, "^(z|food)$");
//只能输入10到20的数字
//string str = "18";
//bool result = Regex.IsMatch(str, "^(1[0-9]|20)$");
//表达式的意思是以b开头,以g结尾,中间跟0个或者多个除\n之外的任意字符,所以下面两个表达式都是匹配的
//bool result = Regex.IsMatch("bbbbg", "^b.*g$");
//bool result = Regex.IsMatch("bg", "^b.*g$");
//判断身份证
//1身份证必须是15位或者是18位,第一位不能是0
//2如果是15为则全部是数字,如果是18位则最后一位可以是Xx或者是数字
//^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9xX])$
//也可以写成如下,以非0开头的数字,之后是14位数字
//之后是两位数字加以为数字或者x或X结尾,增加一个?表示这部分可以有也可以没有,之后结尾
//^[1-9][0-9]{14}([0-9]{2}[0-9xX])?$
//另外,在写表达式的时候尽量不要使用|,性能会比较慢
string str = "";
bool result = Regex.IsMatch(str, "^([1-9][0-9]{14})$|^([1-9][0-9]{16}[0-9xX])$");
}