首頁  >  文章  >  web前端  >  正規表示式分組的詳解(附代碼)

正規表示式分組的詳解(附代碼)

php中世界最好的语言
php中世界最好的语言原創
2018-03-30 11:39:342016瀏覽

這次帶給大家正規表示式分組的詳解(附程式碼),正規表示式分組的注意事項有哪些,下面就是實戰案例,一起來看一下。

正規表示式分組:
如果想要匹配3個數字,正規表示式可以用以下寫法:

\d{3}

以上程式碼使用重複量詞可以符合3位數字。
但是在實際應用中,往往需要重複多個字符,例如我想重複ab兩個字符,使用以下代碼就不合適了,代碼如下:

ab{3}

以上正規表示式只能夠重複3次b。
為了實作重複多個字元可以使用小括號來指定子運算式或說分組來實作此功能,例如:

(ab){3}

#上面的正規則可以重複ab了。
所謂的分組就是使用小括號將一些項目包含起來,使其成為獨立的邏輯域,那麼就可以像處理一個獨立單元一樣去處理小括號的內容。

下面看一段程式碼實例:

(\d{1,3}\.){3}\d{1,3}

上面是一個簡單的ip匹配正規表示式。由小括號包裹的內容會被當作一個獨立的邏輯域來運作。
分組的作用:
在正規表示式中,分組具有舉足輕重的作用,以下就簡單對它的功能做一下簡單的介紹。

一.起到原始的分組作用:

把單獨的項目分組,以便合成子表達式,這樣就可以像處理一個單獨的字元那樣,對其應用|、+、*或?等元字元來操作它們。
實例程式碼如下:

var str="I love javascript and java";
console.log(str.match(/java(script)?/gi));

由上述程式碼的運行結果可以看出,正規表示式既可以匹配字串javascript也可以符合java,這是因在正規表示式中採用了分組,並使用重複量詞? ,可以使前面的子表達式重複0次或1次。

二.定義子模式:

分組另一個非常重要的作用就是在完整的模式中定義子模式。
當一個正規表示式成功的和目標字串相符時,可以從目標字串中抽出和小括號中字表達式相符的部分。
假如我們匹配的是以一個數字開頭的後面跟著一個或多個不區分大小寫的字母的字串,正規表示式可以這樣寫:

/\d[a -zA-Z]+/

假如我們真正關心和需要的是開頭的數字,那麼就可以將正規表示式的數字部分放入小括號就可以從檢索到的匹配中抽取數字.

/(\d)[a-zA-Z]+/

#三.引用子表達式:
正規表示語法中可以在同一個表達式中的後部引用前面的子表達式。這是透過在"\"後面跟隨數字來實現的。此數字指定了小括號字表達式在正規表示式中的位置,例如\1是引用的第一個帶有圓括號的子表達式,自然\2就是第二個帶有圓括號的子表達式。
特別注意:由於子表達式是可以相互嵌套的,那麼計算子表達式的位置的時候,只要確定左括號的位置即可。例如:

/(java(script))/

在以上正規表示式中,嵌套的子表示是可以用\2表示。
對於子表達式的引用,並不是引用的匹配模式,而是對子表示匹配內容的引用。一般來說子運算式的引用一般是用來實作一條約束,看下面的程式碼:

/(['"])[^'"]*\1/

通常情況下左右引號是相符的,如果前面是雙引號,那麼結尾也要是雙引號,前面是單引號那麼結尾也必須是單引號,並且字符串中間不能夠再出現其他的引號,例如:

"腳本之家歡迎您"
'腳本之家歡迎您'

那麼上面的正規表示式就實現此功能,當前面的子表達式匹配單引號的時候,那麼後面的\1也就表示的是單引號,如果子表示匹配的雙引號,那麼後面的\2就表示的是雙引號。
非引用型分組:
分組會佔用一定的系統資源,尤其是正規表示式較長的時候會降低匹配速度。有時候只是為了設定一個分組,並不需要引用,那麼使用非引用類型分組將會是一個好的選擇。

/(java(?:script))/

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

JS裡怎麼用正規則將字串中的多個空格替換為一個空格

在PHP裡使用正規的效率貪婪、非貪婪與回溯詳解(附程式碼)

#

以上是正規表示式分組的詳解(附代碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn