利用正規表示式將字串分組處理

2021-09-30 05:32:20 字數 1487 閱讀 2242

正規表示式在指令碼語言中所起的作用是不言而喻的,熟練掌握正規表示式,對於每個指令碼開發人員都至關重要,下面,我以近期工作中遇到的實際例子來介紹如何使用正規表示式在對字串進行處理。

需求:有乙個字串(如下所示),其特點是都多個括起,每個後用逗號隔開,結尾沒有逗號,中的字串也用逗號隔開

要求將此字串以為單位分割成n個小陣列。

處理的方法如下所示:

重點在於preg_match_all函式的第乙個引數:模式

我們來看這個模式:

//[(.+?)/]/i

//i  是定界符(delimiter

),使用preg_match此類的函式一般都這麼寫,兩個反斜槓//中間的部分為模式內容,i表示不區分大小寫。

再來看這部分

/[(.+?)/]

由於方括號屬於元字元,我們需要將其轉義後才能匹配方括號本身。

注意了,方括號/[/]裡面的這部分內容是重點中的重點,也是難點。

(.+?)

圓括號()表示把這裡面的內容 .+? 作為乙個整體放入記憶體中識別

點. 表示匹配乙個除換行符以外的任意字元

當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配盡可能多的字元。以這個表示式為例:a.*b ,它將會匹配最長的以a開始,以b結束的字串 。如果用它來搜尋aabab 的話,它會匹配整個字串aabab 。這被稱為貪婪 匹配

有時,我們更需要懶惰 匹配,也就是匹配盡可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上乙個問號? 。這樣.*? 就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複 。現在看看懶惰版的例子吧:

a.*?b 匹配最短的,以a開始,以b結束的字串 。如果把它應用於aabab 的話,它會匹配aab(第一到第三個字元) 和ab(第四到第五個字元) 。

為什麼第乙個匹配是aab(第一到第三個字元)而不是ab(第二到第三個字元)?簡單地說,因為正規表示式有另一條規則,比懶惰/貪婪規則的優先順序更高:最先開始的匹配擁有最高的優先權——the match that begins earliest wins。

下面給出懶惰限定符參考表(摘自《正規表示式30分鐘入門教程》)

懶惰限定符

**/語法

說明*?

重複任意次,但盡可能少重複

+?重複1次或更多次,但盡可能少重複

??重複0次或1次,但盡可能少重複

?重複n到m次,但盡可能少重複

?重複n次以上,但盡可能少重複

有的讀者會問了,為什麼點.後面跟的是加號+而不是星號*呢?

因為我們方括號裡面是有內容的,如果修改為星號*,表示匹配前面表示式的0次~多次,即便方括號裡面是空的,這樣的也會被匹配到,當然這樣的字串不是我們需要的。

希望能通過這個例子,你對正規表示式有了更為深入的了解。

如何利用正規表示式來處理字串

正規表示式 regular expression記為re 常用於文字檢索和計算生物學中,它可以表示比單字串 字串集合 擴充套件字串更複雜的搜尋模式。正規表示式有三種最基本的運算 並 連線 閉包。分別記為 如果re1 和re2 都是正規表示式,則 re1 re2 re1 re2 re1 也都是正規表示...

正規表示式用於字串處理

正規表示式用於字串處理 表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。匹配中文字元的正規表示式 u4e00 u9fa5 評注 匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元 包括漢字在內 x00 xff 評注 可以用來計算字串的長度 乙個雙位元組字元長度計...

利用正規表示式驗證Email字串

public class registercheck final pattern pattern pattern.compile pattern1 final matcher mat pattern.matcher email if mat.find return tag email檢查 param...