生活随笔
收集整理的這篇文章主要介紹了
入门正则表达式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
入門正則表達式
???????? 正則表達式(百科),一直在學習,一直在忘記,一直在不經意間用到它,想想自己,或許真的很笨,時至今日,仍只會些皮毛的匹配,始終沒有得到要領。可是工作在繼續,每當自己孤軍作戰至深夜,似乎總也看不到正確的正則表達式在無邊的黑夜里向我招手。頭疼至極,不得已向BBS上的A大,水版等高手求救。很快,那幾個精煉的字符便一掃自己的郁悶,有時晃然明白,有些個圈內的朋友是多么地好!可以讓自己少走很多彎路。
???????? 可是朋友終究只會救自己于一時,不能一世,如何在他們的HELP之下讓自己也會“漁”?總結一些方法,希望有路過的朋友多多指教。
方法1. 用到時,不能第一時間寫出來,速查簡明的教程,如:正則表達式30分鐘入門教程? 優勢很明顯,這種實戰型教程不像有些教科書那樣晦澀難懂,它更像一本字典,如今我將這個教程打印出來,放在案邊,能解決我大部分問題,并且在我有時間時,將用過的復習一下并反復地看教程,我相信多好,終究會慢慢看更多的東西出來。
方法2. 每次上BBS上看這類的貼子,遇到不懂的,或者感覺有理解難度的,先收藏之,過后,反復學習和調試他人的方法。如:
?? 實例1:去除以下配置文件中的重復行(該配置文件可能有幾十萬行):
配置文件XXX.ini內容如下: ?[config] ?key=一心一意 ?key=三心二意 ?key=十全十美 ?key=百年好合 ?key=千金萬馬 ?key=萬馬奔騰 ?key=狗急跳墻 ?key=紙上談兵 ?key=虎虎生威 ?key=高瞻遠矚 ?key=一心一意? 水版給的答案是:
$sText?=?FileRead('XXX.ini') ?$sRer?=?StringRegExpReplace($sText,?'(key=.+)(?=[^\1]+\1)',?'') ?$sRer?=?StringRegExpReplace($sRer,?'^\v+|\r?\n(?=\r?\n)|\r?\n$',?'')?;去掉之前遺留下來的空行! ?MsgBox(0,?'',?$sRer)? 實例2:從一個字符串中提取出IP地址:
A大的:
Local?$Str?=?'\\192.168.8.30\log\yanshi'?Local?$Test?=?StringRegExpReplace($str,?'.*\\((?:\d+\.){3}\d+)\\.*',?'$1') ?MsgBox(0,?'替換結果',?$Test) ??匹配模式也可以: ?Local?$Str?=?'\\192.168.8.30\log\yanshi'?Local?$Test?=?StringRegExp($str,?'(?:\d+\.){3}\d+',?1) ?If?Not?@Error?Then?MsgBox(0,?'',?$Test[0])? ?匹配最后一行:
stringregexp($str,'.+$',3)? 取所在地:
Global?$sText ?$Source?=?_INetGetSource('http://www.ip138.com/ips.asp?ip='?&?InputBox("IP",?"請輸入IP地址")) ?$aRe?=?StringRegExp($Source,?'(?<=<li>)[^<]+',?3) ?For?$i?=?0?To?UBound($aRe)?-?1 ?????????$sText?&=?$aRe[$i]?&?@CRLF ?Next?MsgBox(0,?'',?$sText)? 附一些網上廣為流傳轉載的【不怎么嚴謹,若用于工作中請謹慎測試一下】:
匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*??/> ?評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對于復雜的嵌套標記依舊無能為力 ??匹配首尾空白字符的正則表達式:^\s*|\s*$ ?評注:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式 ??匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* ?評注:表單驗證時很實用 ??匹配網址URL的正則表達式:[a-zA-z]+://[^\s]* ?評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求 ??匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$ ?評注:表單驗證時很實用 ??匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7} ?評注:匹配形式如?0511-4405222?或?021-87888822 ??匹配騰訊QQ號:[1-9][0-9]{4,} ?評注:騰訊QQ號從10000開始 ??匹配中國郵政編碼:[1-9]\d{5}(?!\d) ?評注:中國郵政編碼為6位數字 ??匹配×××:^\d{14}\w|\d{17}\w$
或者:
^\d{14}\d{3}?\w$
?評注:中國的×××為15位或18位 ??匹配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 評注:提取ip地址時有用 ??匹配特定數字: ?^[1-9]\d*$ ? ?//匹配正整數 ?^-[1-9]\d*$? ?//匹配負整數 ?^-?[1-9]\d*$ ?//匹配整數 ?^[1-9]\d*|0$ ?//匹配非負整數(正整數?+?0) ?^-[1-9]\d*|0$ ?//匹配非正整數(負整數?+?0) ?^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ ?//匹配正浮點數 ?^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ ?//匹配負浮點數 ?^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ ?//匹配浮點數 ?^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ ?//匹配非負浮點數(正浮點數?+?0) ?^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數?+?0) ?評注:處理大量數據時有用,具體應用時注意修正 ??匹配特定字符串: ?^[A-Za-z]+$ //匹配由26個英文字母組成的字符串 ?^[A-Z]+$ //匹配由26個英文字母的大寫組成的字符串 ?^[a-z]+$ //匹配由26個英文字母的小寫組成的字符串 ?^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字符串 ?^\w+$ //匹配由數字、26個英文字母或者下劃線組成的字符串 ?評注:最基本也是最常用的一些表達式? ?
方法三:多參與一些老大們在BBS上的學習測試,多寫,盡力去嘗試。無數的實戰一定能煉成神功。呵呵
方法四:用一些功能豐富便利的調試工具,比如上邊入門教程中提到的,我自己用的是A版自己開發的,發上來跟大家分享,見附件。
我會堅持學習它,希望自己能夠駕馭,輕松用于工作中。若路過的您有更好的方法,請您多多指教我這個菜鳥。
感謝!
轉載于:https://blog.51cto.com/boyhong/513881
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的入门正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。