日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

学习deercao的正则笔记

發布時間:2024/6/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 学习deercao的正则笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • #cs
  • 學習deercao提供的正則30分鐘資料的筆記
  • 正則表達式就是個字符串處理語言,是用來“查找你想要的字符串和進行字符串的替換“。
  • 網頁、程序或文件中有關文本內容的處理部分都可以應用正則表達式完成。
  • 在正則表達式中,元字符有特殊功能,如\w匹配“數字、字母、下劃線、漢字”,這個在afan的正則表達式工具中有詳細說明。
  • 字符類:用[]括起來的就是一個字符類,如[aeu]匹配 a 或 e 或 u? ?, [.?!] 匹配 .? ?或? ????或??! ,此刻的字符類里的元字符就
  • ? ?? ???不代表特殊的含義了。
  • ? ? ? ? ? ? ? ? ([^\r]+) 我以前理解為”排除回車符號的至少一個什么字符的匹配“不如”匹配一個及以上非回車的字符“好理解,而且要注意其中
  • ? ? ? ? ? ? ? ? ()的適用場景,用不用他效果有時差別真的很大!
  • |??:就是多條件匹配,如用 \d{3}-\d{7}|\d{7} 匹配010-1234556或1234556,但注意別寫成 \d{7}|\d{3}-\d{7},因為它只能匹配連續的
  • ? ? 7位數字或3位數字-7位數字中的前7位了,我的理解是“在進行多條件匹配時,要把最大的匹配范圍寫到最前面,然后依次減小匹配范圍”
  • ? ? ? ?
  • 分組 :用??() 括起來就是一個分組,如用于IP地址的匹配模式??(\d{1,3}\.){3}\d{1,3},分組()里的內容意思是”匹配1-3位的數字后面跟個
  • ? ?? ? .??的形式重復3次,最后再跟1個1-3位的數字。
  • ? ? ? ?? ? 分組還可以后向引用 ,如IP可用模式 (\d{1,3}\.){3}\d{1,3}\.匹配,就可以寫成 (\d{1,3}\.){3}\1,這個\1就代表分組1(\d{3}\.)
  • ? ? ? ?? ? 所匹配的文本內容了。分組號是從 1 2 逐次命名的,\0代表正則表達式本身。
  • ? ? ? ?? ? 組名可用(?<GroupName>)定義,如(\d{1,3}\.){3}\d{1,3}中的組可(?<Group1>\d{3}\.)定義,引用則用\k<Group1>,完整語法為
  • ? ? ? ?? ? (?<Group1>\d{3}\.){3}\k<Group1> ,其中的 < >可用單引號 '??' 替換,則變成了 (?'Group1'\d{3}\.){3}\k'Group1'??.
  • 分組的3種語法:
  • ? ? (exp)? ?匹配exp,并捕獲文本到自動命名的組里
  • ? ? ? ? (?<GroupName>exp)??匹配exp,并捕獲文本到 自定義的<GroupName>組里
  • ? ? ? ? (?:exp)??匹配exp,但不給組分配組號,也不捕獲文本到組里
  • ? ? ? ?
  • 零寬斷言語法(下面有例子) :
  • ? ? (?=exp)? ?匹配exp前面的內容
  • ? ? ? ? (?<=exp)??匹配exp后面的內容
  • ? ? ? ? (?!exp)? ?可以看成 Str(?!exp),就是Str后不匹配exp
  • ? ? ? ? (?<!exp)??可以看成(?<!exp)Str,就是Str前不匹配exp
  • ? ? ? ?
  • 注釋:語法為 (?#comments)
  • ? ? 例 2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。
  • 懶惰匹配和貪婪匹配? ?? ???例??用 a.*b??匹配??aabab
  • ? ? ? ? 貪婪模式是最大匹配模式,a.*b匹配以a開頭以b結尾中間有任意數量字符的單詞,則貪婪匹配整個字符串aabab而不是aab或ab
  • ? ? ? ? 懶惰模式是在保證成功匹配的情況下進行最小匹配,a.*?b則匹配??aab(第1至第3個字母)??和??ab(第4至第5個字母)
  • ? ? ? ? 為什么懶惰模式不是匹配 ab(第2至第3個字母),因最先匹配優于貪婪和懶惰匹配模式,懶惰模式下該例最先匹配aab,然后是 ab(第4至第5個字母)
  • ? ? 懶惰模式的幾種常用語法
  • ? ? ? ???*? 重復任意次,但盡可能少重復
  • ? ???+? 重復1次或更多次,但盡可能少重復
  • ? ????? 重復0次或1次,但盡可能少重復
  • ? ???{n,m}? 重復n到m次,但盡可能少重復
  • ? ???{n,}? 重復n次以上,但盡可能少重復
  • 平衡組和遞歸匹配??---??根本沒讀懂?如果朋友有這方面的AUTOIT應用的例子,請提供!
  • 曾經犯過的錯誤:
  • 1。
  • #ce
  • ;example1??匹配數字
  • #include <array.au3>
  • Local $Str="我想匹配出字符串中的數字部分," & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第1個數字:4869579" & @CRLF & _
  • ? ?? ?? ???"第1個數字:010-4869579" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第2個數字:0201-48695795" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第2個數字:(010)-4895795" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第2個數字:010)-4895795" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第2個數字:(0201)-48695795" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第3個數字:230604198001025771" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第4個數字:23060419800102577A" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第4個數字:23060419800102577X" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第5個數字:230604198001026" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第6個數字:177608" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "第7個數字:2010年12月17日"
  • Local??$Result=StringRegExp($Str,"\b\d{3}-\d{7}\b|\b\d{7}\b",3);注意多條件書寫的順序,由左及右:大范圍->小范圍
  • _ArrayDisplay($Result) ;OK
  • Local??$Result=StringRegExp($Str,"\d{3}-\d{7}|\d{4}-\d{8}",3)
  • _ArrayDisplay($Result) ;OK
  • Local??$Result=StringRegExp($Str,"\(?0\d{2}[) -]?\d{8}",3);匹配結果不好!
  • _ArrayDisplay($Result)
  • Local??$Result=StringRegExp($Str,"\(0\d{2}\)[-]?\d{7}|\(0\d{3}\)[-]?\d{8}",3);匹配結果不好!
  • _ArrayDisplay($Result)
  • Local??$Result=StringRegExp($Str,"\d{17}[\d|X]|\d{15}",3)
  • ;問題:23060419800102577a,只匹配前15位數字,難道是第一個條件\d{17}[\d|X]不匹配就用\d{15},結果顯示其匹配的結果?結果是這樣的。
  • ;X,還以為是個元字符,有什么特殊含義!就是一個普通的匹配字符,[X]匹配X ,想多了!
  • _ArrayDisplay($Result) ;OK
  • Local $Result=StringRegExp($Str,"\b[1-9]\d{5}\b",3)
  • ;Local $Result=StringRegExp($Str,"[^\d][1-9]\d{5}$");條條大路通羅馬,感謝lpxx
  • ;Local $Result=StringRegExp($Str,"[1-9]\d{5}",3) 這個提取不精確,只要是連續的6位數字它都匹配
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"\d{4}[年|\-|\.]\d{1,2}[月|\-|\.]\d{1,2}日",3)
  • _ArrayDisplay($Result)
  • ;example2??匹配單詞或漢字
  • Local $Str="HI hi,I'm a newuser for autoit,his name is zgk!please 多多指教,鄒國奎英語實在是說不過去,ahiha!"
  • Local $Result=StringRegExp($Str,"hi",3);提取hi不精確
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"\bhi\b",3);提取hi精確,區分大小寫
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"\b(?i)hi\b",3);(?i)表示不區分大小寫,這樣HI也可以匹配了,(?-i)表示區分大小寫
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"鄒國奎",3)
  • _ArrayDisplay($Result)
  • ;example3??以下是對 ^的排除功能進行練習------------------------------------重點掌握
  • Local $Num="192.168.1.10"
  • Local $Result=StringRegExp($Num,'[^.]+',3)
  • ;Local $Result=StringRegExp($Num,'[^.]*',3)
  • _ArrayDisplay($Result)
  • Local $Num="Default Gateway:? ?? ? 192.168.1.1"
  • Local $Result=StringRegExp($Num,'Default Gateway:\h*[^\r]+',3)
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Num,'Default Gateway:\h*([^\r]+)',3)
  • _ArrayDisplay($Result)
  • ;很神奇的(),加上就只匹配字符串中的IP,不加就匹配整個字符串?? ?該例非常值得學習與思考??[^]與 () 的配合使用!
  • Local $Num="Sharon Lee Smith, Design Works Incorporated, CA, 95012"
  • Local $Result=StringRegExp($Num,'([^,]*),([^,]*),([^,]*),(.*)',3)
  • ;Local $Result=StringRegExp($Num,'([^,]*),\w*',3)
  • ;Local $Result=StringRegExp($Num,"(([^,]*),){3}(.*)",3)
  • _ArrayDisplay($Result)
  • Local $Num="Alexander Weatherworth, The Crafts Store, CA, 95014"
  • Local $Result=StringRegExp($Num,'[^,]*',3)
  • ;用*就會匹配出 4??個空格字符,因為當*表示0個數量,那[^,]*是匹配0個非,字符,而[^,]又必須匹配一個字符,空格就被匹配出來,依據具體
  • ;環境,也可能匹配出??,? ? 或其他什么字符來
  • ;如果將*改成+,那[^,]+是至少匹配一個非,字符,就自然不可能匹配空白字符了,不過[^,]+和([^,]+)這里效果是一樣的。
  • _ArrayDisplay($Result)
  • ;那如果我想匹配出----? ?Alexander Weatherworth, The Crafts Store??
  • Local $result=StringRegExp($str,"Alexander Weatherworth, [^,]+",3)
  • ;"Alexander Weatherworth,匹配本身, [^,]+至少匹配一個非,字符,到The Crafts Store,中的,時,就自然停止匹配了,想要的匹配結果就得到了
  • ;如果只想匹配出---? ?The Crafts Store
  • Local $result=StringRegExp($str,"Alexander Weatherworth, ([^,]+)",3);加 () 就OK,()的作用目前還沒明白,當個公式記吧。
  • ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  • Local $FilePath="c:\test\test2\test.txt"
  • Local $Result=StringRegExp($FilePath,"[^\\]+",3)
  • ;感覺就象stringsplit(),但如何用正則提取“文件路徑 文件名 文件后綴”?不想用StringRegExpReplace()完成?
  • _ArrayDisplay($Result)
  • #cs
  • 總結(感謝afan):
  • 1.以上2例都是通過 [^] 來排除某個符號 .??or??,??最后通過 + 來完成,注意不能用 * 代替??+,否則當 *匹配0次時,[^.]會匹配“空格或制表符”
  • #ce
  • ;example4? ?零寬斷言4種語法的例子
  • ;(?=exp)??匹配exp前面的內容(正向預搜索-感謝3mile)
  • Local $Str="南京銀行對同洲電子說:你也算3網融合的巨頭,一直在陽痿!" & @CRLF & _
  • ? ?? ?? ???"同洲電子對南京銀行說:你也算銀行的佼者,到處叫爹!" & @CRLF & _
  • ? ? ? ? ? ? ? ?? ? "nian jing yinhan??to tong??zhou dian zi said:i am your father. a ha!"
  • Local $Result=StringRegExp($Str,".*(?=a)",3)
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,".*(?=到處叫爹)",3)
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"\w+(?=到處叫爹)",3)
  • ;問題:??.*就能實現“正向預搜索,??\w+就無任何反應?
  • ;理解 :.*將 匹配范圍定義到 ”行“,\w+將匹配范圍定義到”單詞“,不知道這樣理解是否正確?但這樣理解確實解釋的通。比如
  • ;\w+(?=到處叫爹) ,”到處叫爹"根本就不是一個單詞,如果把它改成"diedaochujiaodie",那么就會匹配出 '??die??'? ?來,真費勁
  • _ArrayDisplay($Result)
  • #cs上面的正則對這個文本怎么不好使?
  • ===========================================================================
  • Interface List
  • 0x1 ........................... MS TCP Loopback interface
  • 0x2 ...00 50 56 c0 00 08 ...... VMware Virtual Ethernet Adapter for VMnet8
  • 0x3 ...d8 5d 4c 70 db b3 ...... Realtek RTL8139 Family PCI Fast Ethernet NIC - 數據包計劃程序微型端口
  • ===========================================================================
  • ===========================================================================
  • Active Routes:
  • Network Destination? ?? ???Netmask? ?? ?? ? Gateway? ?? ? Interface??Metric
  • ? ?? ?? ? 0.0.0.0? ?? ?? ? 0.0.0.0? ?? ?192.168.1.1? ???192.168.1.7? ?? ?? ? 20
  • ? ?? ???127.0.0.0? ?? ???255.0.0.0? ?? ???127.0.0.1? ?? ? 127.0.0.1? ?? ?? ? 1
  • ? ?? ?192.168.1.0? ? 255.255.255.0? ?? ?192.168.1.7? ???192.168.1.7? ?? ?? ? 20
  • ? ?? ?192.168.1.7??255.255.255.255? ?? ???127.0.0.1? ?? ? 127.0.0.1? ?? ?? ? 20
  • ? ? 192.168.1.255??255.255.255.255? ?? ?192.168.1.7? ???192.168.1.7? ?? ?? ? 20
  • ? ? 192.168.128.0? ? 255.255.255.0? ? 192.168.128.1? ?192.168.128.1? ?? ?? ? 20
  • ? ? 192.168.128.1??255.255.255.255? ?? ???127.0.0.1? ?? ? 127.0.0.1? ?? ?? ? 20
  • ??192.168.128.255??255.255.255.255? ? 192.168.128.1? ?192.168.128.1? ?? ?? ? 20
  • ? ?? ???224.0.0.0? ?? ???240.0.0.0? ?? ?192.168.1.7? ???192.168.1.7? ?? ?? ? 20
  • ? ?? ???224.0.0.0? ?? ???240.0.0.0? ? 192.168.128.1? ?192.168.128.1? ?? ?? ? 20
  • ??255.255.255.255??255.255.255.255? ?? ?192.168.1.7? ???192.168.1.7? ?? ?? ? 1
  • ??255.255.255.255??255.255.255.255? ? 192.168.128.1? ?192.168.128.1? ?? ?? ? 1
  • Default Gateway:? ?? ? 192.168.1.1
  • ===========================================================================
  • Persistent Routes:
  • ??None
  • ??
  • ??要求提取出”? ?Default Gateway: “? ?后面的? ?IP地址
  • #ce
  • Local? ?$file=FileOpen(@ScriptDir&"\temp.txt")
  • Local? ?$str=FileRead($file)
  • Local??$result=StringRegExp($str,"Default Gateway:\h*([^\r]+)",3)
  • ;\h* 匹配任意數量水平空白字符
  • ;[^\r]排除回車符,應該是以 \r 為分割點取后面的部分----我的理解有問題?
  • ;[^\r]+??匹配若干個不是回車的字符(感謝水木子),這樣確實能把后面的內容提取出來,關鍵在于如何不匹配? ?Default Gateway: 加上后面的
  • ;0或多個空白水平符號,這時的 ()??,就很關鍵,加上它就可以不匹配出,但該怎么理解它呢?
  • ;其實??Local??$result=StringRegExp($str,"Default Gateway:\h*([^\s]+)",3)??更好理解,以 "空白符號為分割點取后面的部分“
  • ;Local??$result=StringRegExp($str,"Default Gateway:\h*([^\r].*)",3) 將 + 改成??.*??,也行
  • _ArrayDisplay($result)
  • Local??$result=StringRegExp($str,"\s\d+\.\d+\.\d+\.\d+\r",3)
  • _ArrayDisplay($result)
  • Local??$result=StringRegExp($str,"(?<=\s)\d+\.\d+\.\d+\.\d+(?=\s)",3);擴展一下,提取其中的所有IP形式
  • _ArrayDisplay($result)
  • Local??$result=StringRegExp($str,"(?<=\s)((\d+\.){3}\d+)(?=\s)",3);為什么不能將上面的正則模式改為這個模式?
  • _ArrayDisplay($result)
  • ;example5? ?學習利用[^] 或 ([^])與零寬斷言的后匹配的比較
  • Local $Str="南京銀行對同洲電子說:你也算3網融合的巨頭,一直在陽痿!" & @CRLF & _
  • ? ?? ?? ???"同洲電子對南京銀行說:你也算銀行的佼者,到處叫爹!" & @CRLF & _
  • ? ? ? ? ? ? ? ? ? ? ? ? "nian jing yinhan??to tong??zhou dian zi said:i am your father.a ha!"??& @CRLF & _
  • ? ? ? ? ? ? ? ? ? ? ? ? "nian jing yinhang??to tong??zhou dian zi said:i Am your father.測試空格前后匹配? ? a? ???ha!" & @CRLF & _
  • ? ? ? ? ? ? ? ? ? ? ? ? "abc123??ABC123??zhou dian zi said:i am your father.a ha!"
  • Local $Result=StringRegExp($Str,"\bam\b",3);匹配單詞 am ,OK!
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"\b(?i)am\b",3);不區分大小寫匹配單詞 am Am,OK!
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"\w+(?=a)",3);往前預匹配”??單詞中有字母a的前面的內容? ?“,OK!
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"(?<=a)\w+",3);往后預匹配”??單詞中有字母a的后面的內容? ?“,OK!
  • ;問題:只想匹配出??ha!??后面的 !? ?? ?該怎么做?
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"ha([^a].*)",3)
  • ;;利用字符類的排除功能獲得了 ”匹配的ha(不包括ha)后面的-行內容“? ?,又加深了 [^] 與??()??的應用,其實可以這樣理解,如果 ([^a]),那么
  • ;就是以匹配的內容ha后的 a 為分割點,捕獲分割點后面的內容---應該是a后面的----一行內容
  • ;沒有()將會匹配以??ha (包括ha)開頭的之后的行內容
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"ha[^a].*",3)
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,".*(?=ha)",3)
  • _ArrayDisplay($Result)
  • ;匹配 ha 之前的行內容
  • ;如果把 .*??改成 \w+ 就只能匹配單詞中有ha部分的前面的內容了,差距咋這么大呢?一不小心頭就大!!!
  • Local $Result=StringRegExp($Str,".*(?=一直在陽痿)",3)
  • _ArrayDisplay($Result)
  • Local $Result=StringRegExp($Str,"(?<=一直在陽痿).*",3)
  • _ArrayDisplay($Result)
  • Local $result=StringRegExp($Str,"ni(?!i)",3)
  • _ArrayDisplay($result)
  • Local $result=StringRegExp($Str,"(?<![a-z])\d{3}",3);匹配不是以26個小寫字母開頭的3位數字
  • _ArrayDisplay($result)
  • #cs
  • (?<=<(\w+)>).*(?=<\/\1>)??的解釋:
  • 匹配不包含屬性的簡單HTML標簽內里的內容
  • #ce
  • ;examplp6??懶惰和貪婪模式
  • Local $Str="aabab"
  • Local $result=StringRegExp($Str,"a.*b",3)
  • _ArrayDisplay($result)
  • Local $result=StringRegExp($Str,"a.*?b",3);匹配不是以26個小寫字母開頭的3位數字
  • _ArrayDisplay($result)
  • 復制代碼

    轉載于:https://www.cnblogs.com/swtool/p/6877276.html

    總結

    以上是生活随笔為你收集整理的学习deercao的正则笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。