當前位置:成語大全網 - 書法字典 - 正則表達式字符匹配

正則表達式字符匹配

正則表達式是匹配模式,匹配字符或位置。

本文中使用的圖形工具:Regulex

水平模糊性意味著常規可匹配字符串的長度不是固定的,在許多情況下可以是固定的。

實現的方法是使用量詞。例如,{m,n}表示它在壹行中至少出現m次,最多出現n次。

垂直模糊指的是規則匹配的字符串。說到某個人物,可能不是某個人物,可能有很多種。

或許

這是通過使用字符組實現的。例如,【abc】表示字符可以是字符A、B和c中的任何壹個。

需要強調的是,雖然它被稱為字符組(字符類),但它只是字符之壹。

例如,【abc】的意思是匹配壹個字符,可以是A、B、c中的壹個。

如果字符集中的字符太多該怎麽辦?可以使用範圍符號。

例如,【123456abcdefGHIJKLM】可以寫成【1-6a-fG-M】。使用連字符來省略和縮寫

因為連字符有特殊的用途,我應該怎麽做才能匹配三個字符中的任何壹個:A、-和Z?

它不能寫成【a-z】,因為它代表任何壹個小寫字符。

可以這樣寫:【-az】或【az-】或【a\-z】

也就是把它放在開頭,放在結尾或者逃避。只要它不會讓引擎認為它是壹個範圍表示。

垂直模糊匹配,另壹種情況是壹個字符可以是任何東西,但不能是A、B、c。

這是排除字符組(反義字符組)的概念。例如,【ABC】表示除A、B和c以外的任何字符。字符組的第壹個數字是put(脫字符),它表示否定的概念。

當然,也有相應的範圍表示。

如果我想匹配任何字符怎麽辦?您可以使用【\d\D】、【\w\W】、【\s\S】和【】中的任何壹個。

量詞也叫重復。在掌握了{m,n}的確切含義後,您只需要記住壹些縮寫。

其中regular /\d{2,5}/表示該數字在壹行中出現2到5次。匹配2位數、3位數、4位數和5位數的連續數字。

但它很貪婪,它會盡可能地匹配。如果妳能給我六個,我就要五個。如果妳能給我三個,我就要三個。

反正只要在能力範圍內,多多益善。

我們知道,有時貪婪並不是壹件好事(參見文章中的最後壹個例子)。惰性匹配意味著盡可能少的匹配:

Where /\d{2,5}?/表示雖然兩到五次可以,但當兩次足夠時,我不會再嘗試。

慣性匹配可以通過在量詞後面加壹個問號來實現,所以所有的慣性匹配情況如下:

壹個模式可以實現水平和垂直模糊匹配。並且多選擇分支可以支持多個子模式中的任何壹個。

具體形式如下:(p1|p2|p3),其中p1、p2和p3為子模式,用|(管道符號)分隔,表示其中任意壹個。

例如,要匹配字符串good和nice,您可以使用/good|nice/

但有壹個事實是我們應該註意的。例如,當我使用/good|goodbye/來匹配goodbye字符串時,結果是好的:

並將正則化改為/goodbye|good/,結果是:

換句話說,分支結構也是惰性的,即當前壹個匹配時,後壹個不會再次嘗試。

匹配字符無非是字符組、量詞和分支結構的組合。

讓我們找幾個例子來練習(其中,每個正則化不僅有壹種獨特的寫法):

要求匹配:

分析:

表示16十六進制字符,可以使用字符集【0-9a-fA-F】。

其中,字符可以出現3或6次,需要的是數量詞和分支結構。

使用分支結構時,需要註意順序。

正規化如下:

以24小時工作制為例

要求匹配:

分析:

*** 4位數字,第壹位數字可以是【0-2】

當1位是2時,第二位可以是【0-3】,在其他情況下,第二位是【0-9】。

第三位是【0-5】,第四位是【0-9】。

正規化如下:

如果還要求匹配7:9,也就是說可以省略時間分割中的前導0。

此時,正規化變成:

以yyyy-mm-dd格式為例。

要求匹配:

分析:

年份,四位數,【0-9】{ 4 }

月份,*** 12月份,分為兩種情況:01,02,…,09和10,11,12,可用(0【1-9】|。

天,最長31天,可用(0【1-9】|【12】| 3【01】)

正規化如下:

要求匹配:

分析:

整體模型是:

其中F:\匹配,【a-zA-Z】:\ \是必需的,其中驅動器號不區分大小寫,並且\字符需要轉義。

文件名或文件夾名不能包含某些特殊字符,因此我們需要排除字符組【\ \: *

性格;角色;字母

此外,它們的名稱不能是空名稱,並且至少有壹個字符,即應該使用量詞+。因此匹配的文件夾\可用。

【^\\:*<;& gt|"?\ r \ n/】+\ \

此外,文件夾```可以隨時出現。即(【\ \: *

路徑的最後壹部分可以是沒有\(的文件夾,因此您需要添加(【\ \: *

最後,它被拼接成壹個看似復雜的正則化:

其中,當字符串要在JavaScript中表示字符\時,它也需要進行轉義。

請求來自

提取id=“容器“

也許我想到的第壹條規則是:

因為。是通配符,它匹配雙引號,量詞*是貪婪的。當它遇到container後面的雙引號時,它不會停止,並將繼續匹配,直到遇到最後壹個雙引號。

解決方案是,您可以使用惰性匹配:

當然會有問題。效率相對較低,因為它的匹配原理會涉及到“回溯”的概念(這裏只是順便提壹下)

接下來,後面會詳細說明)。可以優化如下: