1. 程式人生 > >正則表示式學習之一:基本語法

正則表示式學習之一:基本語法

準備把這篇文章 翻譯一下,學習一下正則表示式的基本語法。看的頭大了,這玩意用的時候還是要邊查邊寫的好。

----------------------------------------

簡介

正則表示式是為了描述一個字串的某個特徵,然後用它來匹配另外一個字串。舉個例子,模式“ ab+”意味著“一個 ’a’”和至少一個 ’b’,所以 ”ab”,”abb”, abbbbbbb”都跟這個模式匹配。

正則表示式用於: (1) 判斷一個字串是否跟一個模式匹配,譬如電郵地址; (2)在整個文字中找到符合給定模式的子字串; (3) 對一段文字做複雜的替換操作

正則表示式的語法學習非常簡單,一些抽象概念也很容易理解。許多相關文章沒有將正則表示式的概念從簡單到抽象一步步介紹,所以很多人覺得學習起來很困難。另一方面,每個正則表示式引擎都會描述它獨特的功能,而這部分獨特功能卻不是我們最初應該學習的。

1. 正則表示式基本語法

1.1 一般字元

字母、數字、下劃線、無特殊定義的標點就是“一般字元”。當正則表示式與一個字串匹配時,一個一般字元跟相同的字元匹配。

例子 1:當模式 ”c”與字串 ”abcde”測試匹配時,匹配結果:成功,子串匹配 ”c”

例子 2:當模式“ bcd”與字串“ abcde”測試匹配時,匹配結果:成功,匹配字串 ”bcd”

1.2 簡單轉義字元

我們知道的非列印字元:

表示式

匹配

/r, /n

回車,換行符

/t

Tab

//

“/”

在正則表示式語法中有特殊定義的一些標點符號。為了匹配這些字元,需要在模式中加入 ”/”。舉個例子

:^, $有特殊定義,所以我們需要用 ”/^” ”/$”來匹配它們。

表示式

匹配

/^

“^”

/$

“$”

/.

“.”

轉義字元的匹配效果跟一般字元一樣,也是匹配它們自身字元。

例如:模式 ”/$d”匹配字串 ”abc$de”

1.3 匹配字符集中任意字元的表示式

一些表示式能匹配字符集中的任意字元。比如 ”/d”就能匹配任意的數字。每個這樣的表示式每次只能匹配一個,雖然它們能匹配一組字元中的任意字元。

表示式

匹配

/d

任意數字, 0~9

/w

任意字母,數字,下劃線 A~Z, a~z, 0~9, _

/s

空格, tab,換行,回車,換頁符中的任意一個

.

除了換行符 (/n)之外的任意字元

例如:模式 ”a.d”匹配 ”aaa100”,匹配成功,匹配字串 ”aa1”

1.4 用於匹配許多字符集中的任意一個字元的自定義表示式

使用方括號 ([ ])的表示式表示式可以包含一系列的字元,它能匹配任意的一個。使用 [ ^ ]包含一系列的字元,它能匹配除開所包含的字符集外的字元。

表示式

匹配

[[email protected]]

“a” “b” “5” “@”

[^abc]

匹配除了 ”a” “b” “c”其餘的字元

[f-k]

“f” “k”之間的字元

[^A-F0-3]

不處於 “A”~”F”,”0”~”3”的所有字元

例如:模式 ”[bcd][bcd]”跟字串 ”abc123” 匹配成功,匹配字串 ”bc”

例如:模式 ”[^abc]”跟字串 ”abc123”,匹配成功,匹配子串 ”1”;

1.5 用於數量匹配的特殊表示式

前面介紹的所有表示式只能匹配一次字元。如果一個表示式後面跟隨一個數字,它就能匹配多次。

例如:我們可以使用模式 ”[bcd]{2}”來代替 ”[bcd][bcd]”

表示式

匹配

{n}

匹配 n次,例如 ”/w{2}”等價於 ”/w/w”;”a{5}”等價於 ”aaaaa”

{m, n}

至少匹配 n次,但不多於 m次: ”ba{1,3}” 匹配 ”ba”, “baa”, “baaa”

{m,}

匹配至少 m次: ”/w/d{2,}” ”a12”,”_456” “M12344”..

?

匹配 1次或者 0次,等價於 {0, 1}: “a[cd]?” ”a”, “ac”, “ad”

+

匹配一次或者多次,等價於 {1,}:”a+b” ”ab”, “aab”, “aaab”

*

匹配 0次或者多次,等價於 {0,}:”/^*b” ”b”,”^^^b”…

例如:模式 ”/d+/.?/d*” ”I t costs &12.5”匹配,結果成功,匹配子串 ”12.5”;

例如:模式 ”go{2,8}gle” ”Ads by gooooogle”匹配,結果成功;匹配子串 ”gooooogle”

1.6 巨有抽象功能的特殊標點

一些標點在模式中具有特殊的功能:

表示式

匹配

^

匹配字串的開頭

$

匹配字串的結尾

/b

匹配邊界內的字元 ??

舉例 1:模式 ”^aaa” 跟字串 “xxx aaa xxx”,匹配失敗。因為 ”^”必須匹配字串的開頭。

2:模式 ”aaa$”跟字串 ”xxx aaa xxx”,匹配失敗、

3:模式 ”./b.”跟字串 ”@@@abc”,匹配成功,匹配字串 ”@a”.

“/b”類似於 ”^” ”$”的交集,它不跟任何字元匹配,但是它要求一個 ”/w”在一邊,一個非 ”/w”字元在另一邊

4:模式 ”/bend/b”跟字串 ”weekend,endfor,end”匹配,結果成功,匹配子串 ”end”,開始位置 15,結束位置 18 ??

一些特殊標點能巢狀在其他子模式中起作用:

模式

匹配

|

二選一,左匹配或者右匹配

( )

(1) 當子模式

(2) 子模式匹配結果能單獨檢索

: 當模式 ”Tom|Jack”匹配字串 ”I’m Tom, he is Jace”,匹配成功,子串 ”Tom”開始位置 4,結束位置 7; 當匹配下一個時,匹配成功,子串 ”Jack”,開始位置 15,結束位置 19

例:當模式 ”(go/s*)+”匹配字串 ”Let’s go go go!”,匹配成功;子串 ”go go go”:開始位置 6,結束位置 14

例:當模式¥ (/d+/.?/d*)”與字串 ”$10.9, ¥20.5匹配,匹配成功;子串 ¥20.5 ”:位置開始 6,結束 10。子模式 ”()”的匹配記過是 ”20.5”

下一篇將是一些常規表示式中的高階語法

相關推薦

表示式學習之一基本語法

準備把這篇文章 翻譯一下,學習一下正則表示式的基本語法。看的頭大了,這玩意用的時候還是要邊查邊寫的好。 ---------------------------------------- 簡介 正則表示式是為了描述一個字串的某個特徵,然後用它來匹配另外一個字串。舉個例子

Python 表示式學習(4)查詢以“one”結尾,前面包含0個或多個英文字母(不能是數字或其它字元)的字串。

需求是:查詢以“one”結尾,包含0個或多個英文字母(不能是數字或其它字元)的字串。 import re str='bacdone1cdonone345dhdfgkone' p=re.compile(r'[a-zA-Z]*one') #只搜尋一次 m=re.match

java表示式學習筆記

本人在開發中使用正則表達的場景並不多,偶爾用一下,學習一波,時間久了就又忘記了,放到部落格中,說不定什麼時候就用到了。   一.正則表示式的語法 這個語法表來自:http://www.runoob.com/java/java-regular-expressions.html

表示式學習——網址匹配

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 已上鍊接學習大全。 練習:請嘗試寫一個驗證Email地址的正則表示式。 【版本一】應該可以驗證出類似的Email: [email protected] [em

表示式[] {} ()學習

正則表示式的() [] {}有不同的意思。 () 是為了提取匹配的字串。表示式中有幾個()就有幾個相應的匹配字串。 (\s*)表示連續空格的字串。 []是定義匹配的字元範圍。比如 [a-zA-Z0-9] 表示相應位置的字元要匹配英文字元和數字。[\s*]表示空格或者*號。 {

python表示式學習筆記

正則表示式 學習資源:https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-zh.md 正則表達例子: |    A|B 

以Grep學表示式 學習筆記

基本格式 grep -n -A2 -B3 --color=auto 'the' ./ 搜尋特定字串 grep -n 'the' //含 grep -vn 'the' //不含 grep -in 'the' //含大小寫 利用中括號 [] 來搜尋集合字元 grep -n

字元??bugku(表示式學習

題目 通過讀程式碼可以看出只要我們構造出符合正則表示式的字串通過GET傳參傳過去就可以看到 key 即 flag 通過這道題看了很多正則表示式的語法規則…… ------------------------------------------------------------

Java表示式匹配日期及基本使用

廢話不多說,直接上程式碼: package top.yangxianyang.test; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public

Java表示式學習與記錄

轉載自:http://www.runoob.com/java/java-regular-expressions.html 正則表示式定義了字串的模式,用於搜尋、編輯或處理文字。 1、正則表示式中字元意義: \            將下一字元標

python 表示式學習

  re.match()函式:   函式語法: re.mathch ( pattern , string , flags = 0) 引數說明: pattem 匹配的正則表示式

表示式學習筆記(一)

開始和結束  ^   $ '^' 表示開始  例如:'^the'  表示以 the 開頭的詞 '$' 表示結束  例如:'the$' 表示以 the 結尾的詞 'the' 表示 包含 the 的詞

表示式學習

正則表示式 就是為了查詢到制定的字串。 學習它沒有那麼難的,最簡單的表達方式就是 {在哪裡} {什麼字元} {匹配多少次} 一、定位符(在哪裡) 字元 描述 ^ 匹

python 3.x 爬蟲基礎---表示式(案例爬取貓眼資訊,寫入txt,csv,下載圖片)

python 3.x 爬蟲基礎 前言   正則表示式是對字串的一種邏輯公式,用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則的字串”,此字串用來表示對字串的一種“過濾”邏輯。正在在很多開發語言中都存在,而非python獨有。對其知識點進行總結後,會寫一個demo。 1.正

最全的表示式學習使用大全

[原創文章,轉載請保留或註明出處:http://www.regexlab.com/zh/regref.htm] 引言     正則表示式(regular expression)就是用一個“字串”來描述一個特徵,然後去驗證另一個“字串”是否符合這個特徵。比如 表示

表示式學習使用筆記整理

正則表示式一般來說分為正向正則表示式和逆向正則表示式 正則表示式可以實現字串匹配的功能,它採用一定的策略進行匹配,在有貪婪模式的情況下,正則會優先匹配能匹配的最大值,然後再以步退的模式向前迭代,直到整句正則表示式完全匹配為止,可以看出,在有貪婪模式的正則中,時間

js表示式學習

正則表示式 - 語法 正則表示式(regular expression)描述了一種字串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個

jmeter 表示式學習(一)--使用詳解

jmeter自帶後置處理器:正則表示式提取器,可以用來提取介面響應裡的資訊,給予後續介面傳參用。 例如要提取響應結果裡的token欄位及sex欄位(響應內容為: "token":"83EEAA887F1D2F1AA1CDA9E197810992","sex":0

C#Regex表示式學習筆記

//判斷輸入的字串只包含漢字  Regex regex = new Regex("^[/u4e00-/u9fa5]+$"); //判斷輸入的字串是否是一個合法的手機號  Regex regex = new Regex("^13//d{9}$"); /// 匹配3位或4位區號

Java表示式學習記錄

前言 一節正則表示式的學習記錄,大部分內容來自網上和稍微看了點api文件 基本說明 Pattern 類 pattern 物件是一個正則表示式的編譯表示。Pattern 類沒有公共構造方法。要建立一個 Pattern 物件,你必須首先呼叫其公共靜態編譯方法,