正則表示式學習之一:基本語法
準備把這篇文章 翻譯一下,學習一下正則表示式的基本語法。看的頭大了,這玩意用的時候還是要邊查邊寫的好。
----------------------------------------
簡介
正則表示式是為了描述一個字串的某個特徵,然後用它來匹配另外一個字串。舉個例子,模式“ 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 用於匹配許多字符集中的任意一個字元的自定義表示式
使用方括號 ([ ])的表示式表示式可以包含一系列的字元,它能匹配任意的一個。使用 [ ^ ]包含一系列的字元,它能匹配除開所包含的字符集外的字元。
表示式 |
匹配 |
“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 物件,你必須首先呼叫其公共靜態編譯方法,