C# 正则表达式

using System.Text.RegularExpressions;

public static class StringExt
{
    static private Regex regexNumber = new Regex(@"\d+");
    static public bool IsNumber(this string input)
    {
        if (string.IsNullOrEmpty(input))
        {
            return false;
        }
        return regexNumber.IsMatch(input);
    }
public static string Convert2String(this Match match, string enter) { StringBuilder builder = new StringBuilder(); builder.AppendFormat("匹配的字符串为:{0}, 是否匹配成功{1}, 匹配到的字符串为{2}, 匹配的位置为{3}, 匹配的长度为{4},一共匹配到{5}个结果", enter, match.Success, match.Value, match.Index, match.Length, match.Groups.Count); return builder.ToString(); } } public class program { //我们没有为上面的类声明构造函数,但是我们可以像下面的形式来实例化它 public static void Main(string[] args) { //我们可以在String实例上调用这个方法了 // var abc = "123"; // var isNumber = abc.IsNumber(); #region 1、全数字判断 // Console.WriteLine("全数字的判断:"); // string[] enters = { "123123123", "123a123", "a123123", "", "0" }; // foreach (var enter in enters) // { // /* // 该题的想法很简单,从”头“到”尾“,全是数字就可以了。打开手册, // 看到表示开头的字符是^, // 表示结尾的字符是$, // 表示数字的字符是\d, // 然后看到想要匹配多个字符,有两个选择,+和*,+是至少出现一次,*是0次或者多次, // // ^\d+$。这就完成了!好,让我们来试一试。 // // 在c#中,正则表达式相关的类是System.Text.RegularExpressions.Regex, // 其中我用到的方法有Match,Replace,和IsMatch,分别是匹配,替换和判断是否匹配的便捷方法。用法也很简单,看下我的例子就会明白了。 // */ // Console.WriteLine( // Regex.Match(enter, @"^\d+$").Convert2String(enter)); // } #endregion #region 2、判断号码是否为合法的座机或者手机号码 // //Console.WriteLine("是否为合法的电话号码,电话号码的规则分两部分:"); // Console.WriteLine("固话为7-8位,手机为11位,且由1开头,且都为数字。"); // //string landPhoneRule = @"^\d{7,8}$"; // string handPhoneRule = @"^1\d{10}$"; // //规则合并 // //string rule = string.Format("{0}|{1}", landPhoneRule, handPhoneRule); // string[] enters ={ // "1234567", //7位数字,合法 // "12345678", //8位数字,合法 // "13888888888", //11位以1开头的数字,合法 // "23888888888", //11位以2开头的数字,非法 // "0123456789", //10位数字,非法 // "1388888888a",//带有字符,非法 // "10111111111"//11数字,合法 // }; // foreach (var enter in enters) // { // Console.WriteLine(Regex.Match(enter, handPhoneRule)); // } // // Console.WriteLine("现改变手机的规则,改为:手机要以数字1开头,且第二位和第三位不能有数字0,其他不变"); // handPhoneRule = @"^1[1-9]{2}\d{8}$"; // //rule = string.Format("{0}|{1}", landPhoneRule, handPhoneRule); // foreach (var enter in enters) // { // Console.WriteLine(Regex.Match(enter, handPhoneRule)); // } #endregion #region 判断IP地址是否正确 // Console.WriteLine("题目是判断一个IP是否合法,规则如下:"); // Console.WriteLine("格式必须是***.***.***.***"); // Console.WriteLine("其中第一组数字必须大于1, 每组数字都要小于等于255"); // //复杂版 ?<! // string rule = @"^(\d{1,30})(?<!^({1,3}|2[6-9]\d|25[6-9]|[3-9]\d{2}))(.[01]?\d?\d|2[0-4]\d|25[0-5]){3}$"; // string[] enters = // { // "255.255.255.255", //非法 // "21.1.1.1", //合法 // "256.0.0.0", //非法 // "300.2.2.250", //非法 // "10.1.1.99", //合法 // "00.1.1.009",//非法 // "100.1.1.1"//合法 // }; // foreach (var enter in enters) // { // Console.WriteLine(Regex.Match(enter, rule).Convert2String(enter)); // } #endregion #region 正向预查 负向预查 /* 零宽断言表示匹配字符的时候再添加一些定位条件,使匹配更精准。 \w+(?=ing) 匹配以ing结尾的多个字符(不包括ing) \w+(?!ing) 匹配不是以ing结尾的多个字符 (?<=re)\w+ 匹配以re开头的多个字符(不包括re) (?<!re)\w+ 匹配不是以re开头的多个字符 (?<=\s)\d+(?=\s) 匹配两边是空白符的数字,不包括空白符 */ string input = "1851 1999 1950 1905 2003"; string pattern = @"(?<=19)\d{2}\b"; foreach (Match match in Regex.Matches(input, pattern)) Console.WriteLine(match.Value); #endregion }

         正则表达式手册: http://tool.oschina.net/uploads/apidocs/jquery/regexp.html

posted on 2019-10-11 16:14  jshchg  阅读(237)  评论(0编辑  收藏  举报

导航