僅1個例子輕鬆學習正規表示式

2022-09-26 18:42:13 字數 1906 閱讀 9156

例子

//這是乙個用來匹配url的正規表示式,分組獲取不同部分的資訊

var parse_url = /^(?:([a-za-z]+):)?(\/)([0-9.\-a-za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

var url = "";

var result = parse_url.exec(url);

var names = ["url", "scheme", "slash", "host", "port", "path", "query", "hash"];var i;

for (i =程式設計客棧 0; i < names.length; i++)

//這段**的輸出結果如下程式設計客棧:

解析下面讓我們分解parse_url的各個部分,看看它是如何工作的:

^^字元程式設計客棧表示此字串的開始,它是乙個錨,指引exec不要跳過那些不像url的字首,只匹配那些從開頭就像url一樣的字串。

(?:([a-za-z]+):)?

這個因子匹配乙個協議名,但僅當它後面跟隨乙個 :(冒號)的時候才匹配feiydamkfj。(程式設計客棧63;: . . .)表示乙個非捕獲型分組(noncapturing group)。字尾 ? 表示這個分組是可選的,它表示重複0次或1次。( . . .)表示乙個捕獲型分組。乙個捕獲型分組會複製它所匹配的文字,並把其放到result陣列裡。每個捕獲型分組都會被指定乙個編號。第乙個捕獲型分組的編號是1,所以該分組所匹配的文字副本會出現在result[1]中。 [ . . .]表示乙個字元類。a-za-z這個字元類包含26個大寫字母和26個小寫字母。連線字元 - 表示範圍從a-z。字尾 + 表示這個字元類會被匹配一次或多次。這個組後面跟著字元 : ,它會按字面進行匹配。 

(\/)

這個因子是捕獲型分組2,匹配//。\ /表示應,該匹配 / (斜槓)。它用 \ (反斜槓)來進行轉義,這樣它就不會被錯誤地解釋為這個正規表示式的結束符。字尾 表示 / 會匹配0~3次。

([0-9.\-a-za-z]+)

這個因子是捕獲型分組3。它會匹配乙個主機名,由乙個或多個數字、字母以及 . 或 - 字元組成。- 會被轉義為 \- 以防止與表示範圍的連字元相混淆。

(?::(\d+))?

這個可選的因子匹配埠號,它是由乙個前置 : 加上乙個或多個數字而組成的序列。\d表示乙個數字字元。乙個或多個數字組成的數字串會**獲型分組4捕獲。

(?:\/([^?#]*))?

這個因子也是可選的分組,匹配路徑。該分組以乙個 / 開始。之後的字元類[^?#]以乙個^開始,它表示這個類包含除 ? 和 # 之外的所有字元。* 表示這個字元類會被匹配0次或多次。

注意我在這裡的處理是不嚴謹的。這個類匹配除 ? 和 # 之外的所有字元,其中包括了行結束符、控制字元、以及其他大量不應在此被匹配的字元。大多數情況下,它會按照我們的預期去做,但某些惡意文字可能會有滲漏進來的風險。不嚴謹的正規表示式是乙個常見的安全漏洞發源地。寫不嚴謹的正規表示式比寫嚴謹的正規表示式要容易的多。 

(?:\?([^#]*))?

這個因子是乙個以乙個 ? 開始的可選分組。它包含捕獲型分組6,這個分組包含0個或多個非#字元。

(?:#(.*))?

這個因子是以 # 開始的可選分組。. 會匹配除行結束符以外的所有字元。

$$表示這個字串的結束。它保證在這個url的尾部沒有其他更多的內容了。

通過這個簡單例子,相信大家對正規表示式有了更進一步的理解,祝大家學習愉快!

本文標題: 僅1個例子輕鬆學習正規表示式

本文位址:

乙個例子學會正規表示式

文章以oc為例,正規表示式不分語言,文章中的規則在別的語言也是通用的。最近有個需求是在字串中匹配出特殊的字串,格式是暱稱 我寫出來的正則如下 nsstring regex 一步一步分析,前半段格式是固定的為 在ios裡需要轉義,所以多乙個 這樣,同理也就寫出了user id限制是32位 然後是暱稱,...

輕鬆學習正規表示式

英文原文 learn regular expressions regex with ease 謝謝合作!譯文如下 開篇,談談本文的主要內容 編寫驗證規則最流行和最簡單的方法就是正規表示式了,但唯一的乙個問題是正規表示式的語法太隱晦了,讓人蛋疼無比。很多開發者為了在專案中應用複雜的驗證,經常要使用一些...

輕鬆學習正規表示式

正規表示式 regular expression 描述了一種字串匹配的模式,可以用來檢查乙個串是否含有某種子串 將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。列目錄時,dir txt或ls txt中的 txt就不是乙個正規表示式,因為這裡 與正則式的 的含義是不同的。正規表示式是由普通字...