入门正则表达式

入门正则表达式

         正则表达式(百科),一直在学习,一直在忘记,一直在不经意间用到它,想想自己,或许真的很笨,时至今日,仍只会些皮毛的匹配,始终没有得到要领。可是工作在继续,每当自己孤军作战至深夜,似乎总也看不到正确的正则表达式在无边的黑夜里向我招手。头疼至极,不得已向BBS上的A大,水版等高手求救。很快,那几个精炼的字符便一扫自己的郁闷,有时晃然明白,有些个圈内的朋友是多么地好!可以让自己少走很多弯路。

         可是朋友终究只会救自己于一时,不能一世,如何在他们的HELP之下让自己也会“渔”?总结一些方法,希望有路过的朋友多多指教。

方法1. 用到时,不能第一时间写出来,速查简明的教程,如:正则表达式30分钟入门教程  优势很明显,这种实战型教程不像有些教科书那样晦涩难懂,它更像一本字典,如今我将这个教程打印出来,放在案边,能解决我大部分问题,并且在我有时间时,将用过的复习一下并反复地看教程,我相信多好,终究会慢慢看更多的东西出来。

方法2. 每次上BBS上看这类的贴子,遇到不懂的,或者感觉有理解难度的,先收藏之,过后,反复学习和调试他人的方法。如:

   实例1:去除以下配置文件中的重复行(该配置文件可能有几十万行):

  1. 配置文件XXX.ini内容如下:  
  2. [config]  
  3. key=一心一意  
  4. key=三心二意  
  5. key=十全十美  
  6. key=百年好合  
  7. key=千金万马  
  8. key=万马奔腾  
  9. key=狗急跳墙  
  10. key=纸上谈兵  
  11. key=虎虎生威  
  12. key=高瞻远瞩  
  13. key=一心一意 

水版给的答案是:

  1. $sText = FileRead('XXX.ini')  
  2. $sRer = StringRegExpReplace($sText, '(key=.+)(?=[^\1]+\1)''')  
  3. $sRer = StringRegExpReplace($sRer, '^\v+|\r?\n(?=\r?\n)|\r?\n$''') ;去掉之前遗留下来的空行!  
  4. MsgBox(0, '', $sRer) 

实例2:从一个字符串中提取出IP地址:

A大的:

  1. Local $Str = '\\192.168.8.30\log\yanshi' 
  2. Local $Test = StringRegExpReplace($str, '.*\\((?:\d+\.){3}\d+)\\.*''$1')  
  3. MsgBox(0, '替换结果', $Test)  
  4.  
  5. 匹配模式也可以:  
  6. Local $Str = '\\192.168.8.30\log\yanshi' 
  7. Local $Test = StringRegExp($str, '(?:\d+\.){3}\d+', 1)  
  8. If Not @Error Then MsgBox(0, '', $Test[0]) 

 匹配最后一行:

  1. stringregexp($str,'.+$',3) 

取所在地:

  1. Global $sText  
  2. $Source = _INetGetSource('http://www.ip138.com/ips.asp?ip=' & InputBox("IP""请输入IP地址"))  
  3. $aRe = StringRegExp($Source, '(?<=<li>)[^<]+', 3)  
  4. For $i = 0 To UBound($aRe) - 1  
  5.         $sText &= $aRe[$i] & @CRLF  
  6. Next 
  7. MsgBox(0, '', $sText) 

附一些网上广为流传转载的【不怎么严谨,若用于工作中请谨慎测试一下】:

  1. 匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />  
  2. 评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力  
  3.  
  4. 匹配首尾空白字符的正则表达式:^\s*|\s*$  
  5. 评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式  
  6.  
  7. 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*  
  8. 评注:表单验证时很实用  
  9.  
  10. 匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*  
  11. 评注:网上流传的版本功能很有限,上面这个基本可以满足需求  
  12.  
  13. 匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$  
  14. 评注:表单验证时很实用  
  15.  
  16. 匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}  
  17. 评注:匹配形式如 0511-4405222 或 021-87888822  
  18.  
  19. 匹配腾讯QQ号:[1-9][0-9]{4,}  
  20. 评注:腾讯QQ号从10000开始  
  21.  
  22. 匹配中国邮政编码:[1-9]\d{5}(?!\d)  
  23. 评注:中国邮政编码为6位数字  
  24.  
  25. 匹配身份证:
  26. ^\d{14}\w|\d{17}\w$
    或者:
    ^\d{14}\d{3}?\w$
     
  27. 评注:中国的身份证为15位或18位  
  28.  
  29. 匹配ip地址: $bdz="^\d{1,3}$"
                            $aReturn = StringRegExp($csz,$bdz, 3)
                            If Not IsArray($aReturn) Then
                                    MsgBox(64,"警告",$dailiip & " 中的 " & $csz & " 不是有效IP地址范围!")
                                       $IPchajieq= 1                                                       
                            Else
                                    If $csz > 255 Then                                       
                                            MsgBox(64,"警告",$dailiip & " 中的 " & $csz & " IP数值超出!")
                                            $IPchajieq= 1                                              
                                    EndIf
          EndIf
  30. 评注:提取ip地址时有用  
  31.  
  32. 匹配特定数字:  
  33. ^[1-9]\d*$    //匹配正整数  
  34. ^-[1-9]\d*$   //匹配负整数  
  35. ^-?[1-9]\d*$   //匹配整数  
  36. ^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)  
  37. ^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)  
  38. ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数  
  39. ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数  
  40. ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数  
  41. ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)  
  42. ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)  
  43. 评注:处理大量数据时有用,具体应用时注意修正  
  44.  
  45. 匹配特定字符串:  
  46. ^[A-Za-z]+$  //匹配由26个英文字母组成的字符串  
  47. ^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串  
  48. ^[a-z]+$  //匹配由26个英文字母的小写组成的字符串  
  49. ^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串  
  50. ^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串  
  51. 评注:最基本也是最常用的一些表达式 

 

方法三:多参与一些老大们在BBS上的学习测试,多写,尽力去尝试。无数的实战一定能炼成神功。呵呵

方法四:用一些功能丰富便利的调试工具,比如上边入门教程中提到的,我自己用的是A版自己开发的,发上来跟大家分享,见附件。

我会坚持学习它,希望自己能够驾驭,轻松用于工作中。若路过的您有更好的方法,请您多多指教我这个菜鸟。

感谢!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章