1. 普通字元
2. 非列印字元
3. 特殊字元
4. 限定符
5. 定位符
6. 選擇
正規表示式(regular expression)描述了一種字串匹配的模式(pattern),可以用來檢查乙個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
正規表示式是由普通字元(例如字元 a 到 z)以及特殊字元(稱為"元字元")組成的文字模式。模式描述在搜尋文字時要匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。普通字元包括沒有顯式指定為元字元的所有可列印和不可列印字元。這包括所有大寫和小寫字母、所有數字、所有標點符號和一些其他符號。
非列印字元也可以是正規表示式的組成部分。下表列出了表示非列印字元的轉義序列:
字元描述
\cx匹配由x指明的控制字元。例如, \cm 匹配乙個 control-m 或回車符。x 的值必須為 a-z 或 a-
\f匹配乙個換頁符。等價於 \x0c 和 \cl。
\n匹配乙個換行符。等價於 \x0a 和 \cj。
\r匹配乙個回車符。等價於 \x0d 和 \cm。
\s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。注意 unicode 正規表示式會匹配全形空格符。
\s匹配任何非空白字元。等價於 [^ \f\n\r\t\v]。
\t匹配乙個製表符。等價於 \x09 和 \ci。
\v匹配乙個垂直製表符。等價於 \x0b 和 \ck。
所謂特殊字元,就是一些有特殊含義的字元,如上面說的 runoo*b 中的 *,簡單的說就是表示任何字串的意思。如果要查詢字串中的 * 符號,則需要對 * 進行轉義。許多元字元要求在試圖匹配它們時特別對待。若要匹配這些特殊字元,必須首先使字元"轉義",即,將反斜槓字元\ 放在它們前面。下表列出了正規表示式中的特殊字元:
特別字元描述$
匹配輸入字串的結尾位置。如果設定了 regexp 物件的 multiline 屬性,則 $ 也匹配 『\n』 或 『\r』。要匹配 $ 字元本身,請使用 $。
( )標記乙個子表示式的開始和結束位置。子表示式可以獲取供以後使用。要匹配這些字元,請使用 ( 和 )。
*匹配前面的子表示式零次或多次。要匹配 * 字元,請使用 *。
+匹配前面的子表示式一次或多次。要匹配 + 字元,請使用 +。
.匹配除換行符 \n 之外的任何單字元。要匹配 . ,請使用 . 。
[標記乙個中括號表示式的開始。要匹配 [,請使用 [。
?匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。要匹配 ? 字元,請使用 ?。
\將下乙個字元標記為或特殊字元、或原義字元、或向後引用、或八進位制轉義符。例如, 『n』 匹配字元 『n』。』\n』 匹配換行符。序列 『\』 匹配 「」,而 『(』 則匹配 「(」。
^匹配輸入字串的開始位置,除非在方括號表示式中使用,此時它表示不接受該字元集合。要匹配 ^ 字元本身,請使用 ^。
或 或 共6種。
正規表示式的限定符有:
字元描述
*匹配前面的子表示式零次或多次。例如,zo* 能匹配 「z」 以及 「zoo」。* 等價於。
+匹配前面的子表示式一次或多次。例如,『zo+』 能匹配 「zo」 以及 「zoo」,但不能匹配 「z」。+ 等價於 。
?匹配前面的子表示式零次或一次。例如,「do(es)?」 可以匹配 「do」 、 「does」 中的 「does」 、 「doxy」 中的 「do」 。? 等價於 。
n 是乙個非負整數。匹配確定的 n 次。例如,『o』 不能匹配 「bob」 中的 『o』,但是能匹配 「food」 中的兩個 o。
n 是乙個非負整數。至少匹配n 次。例如,『o』 不能匹配 「bob」 中的 『o』,但能匹配 「foooood」 中的所有 o。『o』 等價於 『o+』。『o』 則等價於 『o*』。
m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,「o」 將匹配 「fooooood」 中的前三個 o。『o』 等價於 『o?』。請注意在逗號和兩個數之間不能有空格。
定位符使您能夠將正規表示式固定到行首或行尾。它們還使您能夠建立這樣的正規表示式,這些正規表示式出現在乙個單詞內、在乙個單詞的開頭或者乙個單詞的結尾。定位符用來描述字串或單詞的邊界,^ 和 $ 分別指字串的開始與結束,\b 描述單詞的前或後邊界,\b 表示非單詞邊界。
正規表示式的定位符有:
字元描述
^匹配輸入字串開始的位置。如果設定了 regexp 物件的 multiline 屬性,^ 還會與 \n 或 \r 之後的位置匹配。
$匹配輸入字串結尾的位置。如果設定了 regexp 物件的 multiline 屬性,$ 還會與 \n 或 \r 之前的位置匹配。
\b匹配乙個單詞邊界,即字與空格間的位置。
\b非單詞邊界匹配。
注意
不能將限定符與定位符一起使用。由於在緊靠換行或者單詞邊界的前面或後面不能有乙個以上位置,因此不允許諸如 ^* 之類的表示式。
若要匹配一行文字開始處的文字,請在正規表示式的開始使用 ^ 字元。不要將 ^ 的這種用法與中括號表示式內的用法混淆。
若要匹配一行文字的結束處的文字,請在正規表示式的結束處使用 $ 字元。
若要在搜尋章節標題時使用定位點
用圓括號將所有選擇項括起來,相鄰的選擇項之間用|分隔。但用圓括號會有乙個***,使相關的匹配會被快取,此時可用?:放在第乙個選項前來消除這種***。
其中 ?: 是非捕獲元之一,還有兩個非捕獲元是 ?= 和 ?!,這兩個還有更多的含義,前者為正向預查,在任何開始匹配圓括號內的正規表示式模式的位置來匹配搜尋字串,後者為負向預查,在任何開始不匹配該正規表示式模式的位置來匹配搜尋字串。
9 正規表示式
mysql中使用regexp操作符來進行正規表示式匹配。下表中的正則模式可應用於regexp操作符中。模式描述 匹配輸入字串的開始位置。如果設定了regexp物件的multiline屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置。如果設定了regexp物件的multiline屬性,也匹...
9 正規表示式
思路 使用兩個變數指示兩個不同的string 先檢查元素是否相等,是否為特殊字元 與.之後使用迴圈設定在碰到上述兩字元之後開始迴圈檢測 我理解錯了正規表示式中.的用法!是任意匹配乙個字元,而不是匹配前面的乙個字元!字元匹配乙個任意的字元 字元匹配前面0個或者多個字元 可以匹配0個一定要記好 但是吧,...
軟體設計師教程目錄
第1章 計算機系統知識 1.1計算機系統基礎知識1 1.2計算機體系結構1 1.3安全性 可靠性與系統效能評測基礎知識34 第2章 程式語言基礎知識51 2.1程式語言概述5 1 2.2語言處理程式基礎6l 第3章 作業系統知識94 3.1作業系統基礎知識94 3.2處理機管理98 3.3儲存管理 ...