BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #1678同步于 2010/4/29
dotNET机器人发帖

[合集] 【求助】如何在.net中应用正则表达式?

snoopyboy
2010/4/29镜像同步0 回复
☆─────────────────────────────────────☆ lynora (四夕回贝) 于 (Mon Apr 26 09:44:26 2010) 提到: 想在.net的环境下运用正则表达式对IP地址进行匹配,但是不知道.net中有没有正则表达式的工具。请xdjm帮帮忙啊,无尽感激~~!!!! ☆─────────────────────────────────────☆ rainblue (everyday BUPT & BYR) 于 (Mon Apr 26 11:11:51 2010) 提到: 有正则表达式的函数啊,直接对IP地址(字符串)进行匹配就可以了啊。 ☆─────────────────────────────────────☆ snoopyboy (patpat~) 于 (Mon Apr 26 15:07:19 2010) 提到: re~ 【 在 rainblue (everyday BUPT & BYR) 的大作中提到: 】 : 有正则表达式的函数啊,直接对IP地址(字符串)进行匹配就可以了啊。 ☆─────────────────────────────────────☆ icefire (飞) 于 (Mon Apr 26 15:15:16 2010) 提到: 来段详细的。 在源文件开头加上using System.Text.RegularExpressions; 然后: private bool IsIPAddress(string addressGet) { public static readonly string IPPattern = @"^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)((\d|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.){2}(\d|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$"; //这个不是最高效的,但是一定是没有问题的 return Regex.IsMatch(addressGet, IPPattern); } 【 在 lynora 的大作中提到: 】 : 想在.net的环境下运用正则表达式对IP地址进行匹配,但是不知道.net中有没有正则表达式的工具。请xdjm帮帮忙啊,无尽感激~~!!!! ☆─────────────────────────────────────☆ duvet (蕾丝乳酪) 于 (Mon Apr 26 21:22:31 2010) 提到: 我想知道,用正则表达式匹配来检测IP地址比较快,还是将字符串用“."分割之后4个数字比较一下比较快。。。 ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Mon Apr 26 23:22:01 2010) 提到: 正则表达式可以确保格式无误 你要只是用"."分隔然后做判断,很麻烦的 ip地址的正则表达式 搜下,应该有,每种语言正则表达式差别不是太大。 【 在 duvet (蕾丝乳酪) 的大作中提到: 】 : 我想知道,用正则表达式匹配来检测IP地址比较快,还是将字符串用“."分割之后4个数字比较一下比较快。。。 ☆─────────────────────────────────────☆ duvet (蕾丝乳酪) 于 (Tue Apr 27 00:32:11 2010) 提到: 【 在 ahomer 的大作中提到: 】 : 正则表达式可以确保格式无误 : 你要只是用"."分隔然后做判断,很麻烦的 : ip地址的正则表达式 搜下,应该有,每种语言正则表达式差别不是太大。 我真不觉得正则表达式可以保证格式无误,因为大多时候我都看不懂,更别提改了 我觉得分割判断挺简单易懂的,而且改起来比较容易 Private Function IsIPAddress(ByVal str As String) As Boolean Dim ipArray As String() = str.Split(New String() {"."}, StringSplitOptions.None) If Not ipArray.Length = 4 Then Return False End If For Each ipString As String In ipArray Dim ipNumber As Integer = 0 If Not Integer.TryParse(ipString, ipNumber) Then Return False End If If ipNumber < 0 OrElse ipNumber > 255 Then Return False End If Next Return True End Function ☆─────────────────────────────────────☆ icefire (飞) 于 (Tue Apr 27 09:49:50 2010) 提到: 这么做效率肯定不如正则表达式。 如果想做一个好的程序员,正则表达式是必须掌握的。 【 在 duvet 的大作中提到: 】 : 我真不觉得正则表达式可以保证格式无误,因为大多时候我都看不懂,更别提改了 : 我觉得分割判断挺简单易懂的,而且改起来比较容易 : Private Function IsIPAddress(ByVal str As String) As Boolean : ................... ☆─────────────────────────────────────☆ lynora (四夕回贝) 于 (Tue Apr 27 10:02:13 2010) 提到: 十分感谢~~!! 【 在 icefire 的大作中提到: 】 : 来段详细的。 : 在源文件开头加上using System.Text.RegularExpressions; : 然后: : ................... ☆─────────────────────────────────────☆ duvet (蕾丝乳酪) 于 (Tue Apr 27 11:18:33 2010) 提到: 【 在 icefire 的大作中提到: 】 : 这么做效率肯定不如正则表达式。 : 如果想做一个好的程序员,正则表达式是必须掌握的。 Imports System.Text.RegularExpressions Module Module1 Sub Main() Dim t0 As DateTime = Now For i As Integer = 1 To 1000000 IsIPAddress1("192.168.1.1") Next Dim t1 As DateTime = Now Console.WriteLine((t1 - t0).TotalMilliseconds) For i As Integer = 1 To 1000000 IsIPAddress2("192.168.1.1") Next Dim t2 As DateTime = Now Console.WriteLine((t2 - t1).TotalMilliseconds) For i As Integer = 1 To 1000000 IsIPAddress3("192.168.1.1") Next Dim t3 As DateTime = Now Console.WriteLine((t3 - t2).TotalMilliseconds) End Sub Private Function IsIPAddress1(ByVal str As String) As Boolean Dim IPPattern As String = "^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)((\d|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.){2}(\d|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$" Return Regex.IsMatch(str, IPPattern) End Function Private Function IsIPAddress2(ByVal str As String) As Boolean Dim ipArray As String() = str.Split(New String() {"."}, StringSplitOptions.None) If Not ipArray.Length = 4 Then Return False End If For Each ipString As String In ipArray Dim ipNumber As Integer = 0 If Not Integer.TryParse(ipString, ipNumber) Then Return False End If If ipNumber < 0 OrElse ipNumber > 255 Then Return False End If Next Return True End Function Private Function IsIPAddress3(ByVal str As String) As Boolean Return System.Net.IPAddress.TryParse(str, Nothing) End Function End Module 结论: 6025.9815(正则表达式) 1762.5825(字符串“.”分割) 790.965(直接用IPAddress.TryParse) 大概由此可见,有.net提供的方法就别自己写了(笑) 我不是一个好的程序员,我也没想做一个好的程序员 ☆─────────────────────────────────────☆ icefire (飞) 于 (Tue Apr 27 12:50:44 2010) 提到: 对于效率: 这里用正则表达式,是逐字符匹配;而字符串分隔是转换后比较大小。所以不能不承认这时正则表达式效率低下了些。 有.net库函数就别自己写:有道理。不过话说这个函数有问题,比如请输入12试试。 另外,本人认为正则表达式还是很重要的。有时候写程序的速度和程序健壮性比运行效率更重要。 【 在 duvet 的大作中提到: 】 : Imports System.Text.RegularExpressions : Module Module1 : Sub Main() : ................... ☆─────────────────────────────────────☆ ahomer (水上蓝心) 于 (Tue Apr 27 22:59:16 2010) 提到: 这个函数的ip判断是不全面的 有问题 与其为了一个复杂判断写很多if else 不如写一段 正则表达式,看不懂只是借口: ) 【 在 duvet (蕾丝乳酪) 的大作中提到: 】 : 我真不觉得正则表达式可以保证格式无误,因为大多时候我都看不懂,更别提改了 : 我觉得分割判断挺简单易懂的,而且改起来比较容易 : Private Function IsIPAddress(ByVal str As String) As Boolean : ................... ☆─────────────────────────────────────☆ duvet (蕾丝乳酪) 于 (Wed Apr 28 00:32:55 2010) 提到: 【 在 ahomer 的大作中提到: 】 : 这个函数的ip判断是不全面的 : 有问题 : 与其为了一个复杂判断写很多if else : ................... 这可不是复杂的if else 另外我觉得我写代码最重要的一点是让别人能够更很容易的看懂并且能很容易的修改,很显然正则表达式不符合我的要求,仅此而已
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。