正则表达式ipv4校验
### 正则表达式ipv4校验 #### 一、正则表达式基础概念与元字符 正则表达式是一种强大的文本模式匹配工具,在多种编程语言中都有应用,包括C#。通过正则表达式可以方便地进行字符串的查找、替换、分割等操作。 ##### 常用元字符: 1. **@字符** 在C#中,正则表达式字符串前加上`@`字符可以避免编译器对其中的转义序列进行解释,保持它们作为正则表达式的元字符存在。 2. **定位元字符** 定位元字符用于确定匹配的位置。 - `\b`:匹配单词的边界,即单词字符与非单词字符之间的边界。 - `\B`:匹配非单词边界的任何位置。 - `^`:匹配输入字符串的开始位置。 - `$`:匹配输入字符串的结束位置。 - `\A`:匹配字符串的起始位置。 - `\z`:匹配字符串的结束位置。 - `\Z`:匹配字符串的结束位置或换行符之前。 - `\G`:匹配前一个匹配的结束位置。通常与`Match.NextMatch()`一起使用以确保所有匹配都是连续的。 3. **反义字符** 这些字符用于指定不在某些类中的字符。 - `\W`:匹配非单词字符。 - `\S`:匹配非空白字符。 - `\D`:匹配非数字字符。 - `\B`:匹配非单词边界位置。 - `[ab]`:匹配括号内的任何一个字符。 - `[a-c]`:匹配从a到c之间的任何一个字符。 - `[^x]`:匹配除了x之外的任何单个字符。 - `[^adwz]`:匹配除了adwz这几个字符以外的任何单个字符。 4. **重复描述字符** 这些字符用于指定匹配的重复次数。 - `{n}`:匹配前面的字符恰好n次。 - `{n,}`:匹配前面的字符至少n次。 - `{n,m}`:匹配前面的字符至少n次但不超过m次。 - `?`:匹配前面的字符零次或一次。 - `+`:匹配前面的字符一次或多次。 - `*`:匹配前面的字符零次或多次。 5. **择一匹配** `|`用于指定两种或多种模式的择一匹配。 #### 二、ipv4校验示例 ipv4地址通常由四个介于0到255之间的数字组成,每个数字之间用`.`分隔。下面详细分析如何构建一个正则表达式来验证ipv4地址的有效性。 1. **分析**: - 任何一位数字,即0-9。 - 任何两位数,即10-99。 - 任何以1开头的三位数,即100-199。 - 任何以2开头,第二位是0-4的三位数,即200-249。 - 任何以25开头,第三位是0-5的三位数,即250-255。 2. **正则表达式实现**: - `\d`:匹配任何一位数字。 - `[1-9]\d`:匹配任何两位数。 - `1\d{2}`:匹配以1开头的三位数。 - `2[0-4]\d`:匹配以2开头且第二位为0-4的三位数。 - `25[0-5]`:匹配以25开头且第三位为0-5的三位数。 组合起来的正则表达式如下: ```regex @"^(((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]))$" ``` 其中,`^`和`$`分别用于匹配字符串的开始和结束位置;`.`用于匹配分隔的`.`符号。 3. **测试核心源码**: 下面是一个简单的C#程序,用于验证用户输入的ipv4地址是否有效: ```csharp using System; using System.Text.RegularExpressions; class Program { static void Main(string[] args) { label: Console.Write("请输入一个有效的ipv4地址:"); string input = Console.ReadLine(); string pattern = @"^(((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5]))$"; bool isMatch = Regex.IsMatch(input, pattern); if (!isMatch) { Console.WriteLine("注意!这不是一个有效的ipv4地址!"); goto label; } else { Console.WriteLine("干得漂亮!"); } Console.ReadKey(); } } ``` 4. **运行结果**: 如果用户输入的是一个有效的ipv4地址,例如`192.168.1.1`,程序将输出“干得漂亮!”;如果输入的不是一个有效的ipv4地址,例如`192.168.1`,程序会提示“这不是一个有效的ipv4地址!”并要求重新输入。 通过以上介绍,我们可以看到正则表达式在处理文本匹配任务时的强大能力,特别是在处理复杂的ipv4地址验证这样的场景。