學習正規表示式記錄

2022-02-20 06:44:52 字數 1284 閱讀 8200

表1.常用的元字元

**說明

.匹配除換行符以外的任意字元

\w匹配字母或數字或下劃線或漢字

\s匹配任意的空白符

\d匹配數字

\b匹配單詞的開始或結束

^匹配字串的開始

$匹配字串的結束

1.^\d$  這個是驗證輸入5到12位的數字

2.**/語法說明*

重複零次或更多次

+重複一次或更多次

?重複零次或一次

重複n次

重複n次或更多次

重複n到m次

下面是一些使用重複的例子:

windows\d+匹配windows後面跟1個或更多數字

^\w+匹配一行的第乙個單詞(或整個字串的第乙個單詞,具體匹配哪個意思得看選項設定)

3.要想查詢數字,字母或數字,空白是很簡單的,因為已經有了對應這些字元集合的元字元,但是如果你想匹配沒有預定義元字元的字元集合(比如母音字母a,e,i,o,u),應該怎麼辦?

很簡單,你只需要在方括號裡列出它們就行了,像[aeiou]就匹配任何乙個英文母音字母,[.?!]匹配標點符號(.或?或!)。

我們也可以輕鬆地指定乙個字元範圍,像[0-9]代表的含意與\d就是完全一致的:一位數字;同理[a-z0-9a-z_]也完全等同於\w(如果只考慮英文的話)。

下面是乙個更複雜的表示式:\(?0\d[) -]?\d。

「(」和「)」也是元字元,後面的分組節裡會提到,所以在這裡需要使用轉義。

這個表示式可以匹配幾種格式的**號碼,像(010)88886666,或022-22334455,或02912345678等。我們對它進行一些分析吧:首先是乙個轉義字元\(,它能出現0次或1次(?),然後是乙個0,後面跟著2個數字(\d),然後是)或-或空格中的乙個,它出現1次或不出現(?),最後是8個數字(\d)。

不幸的是,剛才那個表示式也能匹配010)12345678或(022-87654321這樣的「不正確」的格式。要解決這個問題,我們需要用到分枝條件。正規表示式裡的分枝條件指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。聽不明白?沒關係,看例子:

0\d-\d|0\d-\d這個表示式能匹配兩種以連字型大小分隔的**號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。

\(?0\d\)?[- ]?\d|0\d[- ]?\d這個表示式匹配3位區號的**號碼,其中區號可以用小括號括起來,也可以不用,區號與本地號間可以用連字型大小或空格間隔,也可以沒有間隔。你可以試試用分枝條件把這個表示式擴充套件成也支援4位區號的。

學習記錄 正規表示式

學習記錄 正規表示式 註明 記錄工作和學習中常用的正規表示式以及php中常用得兩個函式preg match all preg replace 特殊字元類含義.所有字元 d所有數字 d所有非數字 w數字字母下劃線 w非數字字母下劃線 s 換行等空白區域 s非空白區域 1 匹配字元1 1 3 匹配字元1...

正規表示式學習記錄

表示用什麼開頭 b 表示以b開頭的字元 表示以什麼結尾 3 表示以3結尾的字元 代表任意字元 代表出現任意個數,包括0次 代表出現必須大於1次,不包括0次 代表出現2次 代表任意字元出現2次 代表出現3次和3次以上 代表出現2 5次 非貪婪匹配 從左邊開始匹配 如 匹配aaxooooooxoxxjf...

正規表示式學習記錄

q 經常看見的正則前面的 i s m is im 是什麼意思?a 稱為內聯匹配模式,通常用內聯匹配模式代替使用列舉值regexoptions指定的全域性匹配模式,寫起來更簡潔。i 表示所在位置右側的表示式開啟忽略大小寫模式 s 表示所在位置右側的表示式開啟單行模式。更改句點字元 的含義,以使它與每個...