(轉貼 正規表示式學習心得體會 4

2021-04-13 22:19:36 字數 2404 閱讀 7833

**貼)正規表示式學習心得體會(4)

21. /b(?/w+)/b/s*/k/b (使用自行命名群組抓取重複字)

使用括號還有許多特別的語法元素,比較通用的列表如下:

抓取(captures)

(exp) 符合exp並抓取它進自動命名的群組

(?exp) 符合exp並抓取它進命名的群組name

(?:exp) 符合exp,不抓取它

lookarounds

(?=exp) 符合字尾為exp的文字

(?<=exp) 符合字首為exp的文字

(?!exp) 符合後面沒接exp字尾的文字(?

positive lookaround

接下來要談的是lookahead及lookbehind assertions。它們所查詢的是目前符合之前或之後的文字,並不包含目前符合本身。這些就如同」^」及」/b」特殊字元,本身並不會對應任何文字(用來界定位置),也因此稱做是zero-width assertions,看些例子也許會清楚些。

(?=exp)是乙個」zero-width positive lookahead assertion」。它指的就是符合字尾為exp的文字,但不包含exp本身。

22. /b/w+(?=ing/b) (字尾為ing的字,比如說filling所符合的就是fill)

(?<=exp)是乙個」zero-width positive lookbehind assertion」。它指的就是符合字首為exp的文字,但不包含exp本身。

23. (?<=/bre)/w+/b (字首為re的字,比如說repeated所符合的就是peated)

24. (?<=/d)/d/b (在字尾的三位數字,且之前接一位數字)

25. (?<=/s)/w+(?=/s) (由空格符分隔開的字母數字字串)

negative lookaround

之前有提到,如何查詢乙個非特定或非在特定群組的字元。但如果只是要驗證某字元不存在而不要對應這些字元進來呢?舉個例子來說,假設要查詢乙個字,它的字母裡有q但接下來的字母不是u,可以用下列的re來做。

26. /b/w*q[^u]/w*/b (乙個字,其字母裡有q但接下來的字母不是u)

這樣的re會有乙個問題,因為[^u]要對應乙個字元,所以若q是字的最後乙個字母,[^u]這樣的下法就會將空格符對應下去,結果就有可能會符合二個字,比如說」iraq haha」這樣的文字。使用negative lookaround就能解決這樣的問題。

27. /b/w*q(?!u)/w*/b (乙個字,其字母裡有q但接下來的字母不是u)

這是」zero-width negative lookahead assertion」。

28. /d(?!/d) (三個位的數字,其後不接乙個位數字)

同樣的,可以使用(?

29. (?

30. (?<=<(/w+)>).*(?=) (html卷標間的文字)

這使用lookahead及lookbehind assertion來取出html間的文字,不包括html卷標。

請批註(comments please)

括號還有個特殊的用途就是用來包住批註,語法為」(?#comment)」,若設定」ignore pattern whitespace」選項,則re中的空格符當re使用時會乎略。此選項設定時,」#」之後的文字會乎略。

31. html卷標間的文字,加上批註

(?<=   #查詢字首,但不包含它

<(/w+)> #html標籤

)       #結束查詢字首

.*      #符合任何文字

(?=     #查詢字尾,但不包含它

#符合所抓取群組1之字串,也就是前面小括號的html標籤

)       #結束查詢字尾

尋找最多字元的字及最少字元的字(greedy and lazy)

當re下要查詢乙個範圍的重複時(如」.*」),它通常會尋找最多字元的符合字,也就是greedy matching。舉例來說。

32. a.*b  (開始為a結束為b的最多字元的符合字)

若有一字串是」aabab」,使用上述re所得到的符合字串就是」aabab」,因為這是尋找最多字元的字。有時希望是符合最少字元的字也就是lazy matching。只要將重複前述專案的表加上問號(?)就可以把它們全部變成lazy matching。因此」*?」代表的就是重複任意次數,但是使用最少重複的次數來符合。舉個例子來說:

33. a.*?b (開始為a結束為b的最少字元的符合字)

若有一字串是」aabab」,使用上述re第乙個所得到的符合字串就是」aab」再來是」ab」,因為這是尋找最少字元的字。

*? 重複任意次數,最少重複次數為原則

+? 重複至少一次,最少重複次數為原則

?? 重複零次或一次,最少重複次數為原則

? 重複至少n次,但不超過m次,最少重複次數為原則

? 重複至少n次,最少重複次數為原則

(轉貼 正規表示式學習心得體會 1

貼 正規表示式學習心得體會 1 什麼是re?想必各位大大在做檔案查詢的時侯都有使用過萬用字元 比如說想查詢在windows目錄下所有的word檔案時,你可能就會用 doc 這樣的方式來做查詢,因為 所代表的是任意的字元。re所做的就是類似這樣的功能,但其功能更為強大。寫程式時,常需要比對字串是否符合...

(轉貼 正規表示式學習心得體會 1

regular expressions 正規表示式,以下用re稱呼 對小弟來說一直都是神密的地帶,看到一些網路上的大大,簡單用re就決解了某些文字的問題,小弟便興起了學一學re的想法,但小弟天生就比較懶一些,總希望看有沒有些快速學習的方式,於是小弟又請出google大神,借由祂的神力,小弟在網路上找...

學習心得體會1

首先我定義了乙個類 sealed class usermodel set public string username set public usermodel string name,int32 age public void displaymember userage this.username...