架構思維案例:速學正則
前言
本文的目的不僅是教會讀者怎麼使用正則表示式。更希望通過學習正則表示式的案例,讓讀者感受一種不同的思維方式。魚亦漁亦水,誰知道呢,我在扯淡,你要不要看?
正文
正則表示式是描述一組字串特徵的模式,用來匹配特定的字串。--Ken Thompson
這句話中提到了兩點:
- 正則表示式是描述一組字串特徵的模式;
- 正則表示式是用來匹配特定的字串的。
匹配特定字串就是正則表示式要解決的問題域。
怎麼解決的呢?通過描述一組字串特徵的方式來匹配。
舉個例子:
www.ly.com
我們通常是這樣去描述的:3w.ly.com
這裡我們把連續的多個w,用位數簡述了(對應位區間的概念,後面會詳細講解)。這就是正則表示式解決問題的思路。
正則表示式:
w{3}.ly.com
再比如,怎麼描述一個正整數呢?
首位是1-9的數字,其餘位為0到9。其餘位位數是0到無窮。
這裡我們把首位字元的可能性羅列了出來。把其餘位位數用一個可能性區間描述。
正則表示式:
[1-9][0-9]{0,}
至此,我們感性認識了正則表示式。下面將正式帶領大家認識這個“描述字串特徵的模式”。
什麼是字串呢?一串字元唄。本著化繁為簡的常規架構手法(分而治之),可以想到描述一組字串特徵的問題,可以拆解為:
- 描述一個字元特徵的問題;
- 描述一個字元位區間的問題。
比如,上面正整數的例子[1-9]描述了字元特徵,{0,}描述了0到無窮的一個位區間。
這裡我們需要宣告或重申幾個概念:
- 正則表示式:描述一組字串特徵的模式
- 值特徵:描述一個字元特徵(可能性)的模式
- 位區間:描述一個字元位區間的模式
一、值特徵符
我們使用[ ]表示。如下:
[Aa]:描述一個字元可能是A或a中的一個。
- 簡寫法
-
A=[A]
當描述的字元取值只有一種可能時,我們通常用字面量A代替。 -
[1-5]=[1,2,3,4,5]
當描述的字元取值的可能性是連續時,我們通常用-簡寫。
-
-
邏輯符號
-
|
邏輯“或” -
^
邏輯“取反”
-
-
抽象
- 數字
\d=[0123456789]
- 字母或數字或下劃線
\w=[A-Za-z0-9_]
- 空白字元
\s=[ \f\n\r\t\v]
- 大寫字母是小寫字元表徵值的取反
\D=^\d \W=^\w \S=^\s
- 任意字元
.
正則中的object
二、位區間符
我們使用{}標識。如下:
{3,5}:描述3到5位。
{2,}:描述2到無窮位。
{0,3}:描述0到3位。
簡寫
- {3}={3,3}
- *={0,}
- +={1,}
- ?={0,1}
三、邊界符
邊界符不描述字元,而是描述字串中的位置。
- 行首:^
- 行尾:$
- 單詞邊界:\b
四、分組符
分組符是解決另一個問題。在我們選擇出某個字串後,我們在替換結果裡使用其中的一部分(子模式)。
我們把這種,先選擇後使用的過程叫做後引用。
其中分組符,就是用來解決子模式切割的。
- 捕獲分組:()
- 非捕獲分組:(?:)
替換時,$0:是匹配的整個字串。
$1:是捕獲的第一個子模式(從前到後遇到的第一個捕獲分組起始符)
依次類推,$n:是捕獲的第n個子模式。
下面給三個例子:
例1:
例2:
例3:
五、轉義符
\
怎麼描述被正則表示式佔用的關鍵字元呢?
轉義。
例如:\.描述.
關注公眾號“架構思維修煉”,輸入關鍵字“正則表示式圖解”,獲取高清腦圖。
相關推薦
架構思維案例:速學正則
前言 本文的目的不僅是教會讀者怎麼使用正則表示式。更希望通過學習正則表示式的案例,讓讀者感受一種不同的思維方式。魚亦漁亦水,誰知道呢,我在扯淡,你要不要看? 正文 正則表示式是描述一組字串特徵的模式,用來匹配特定的字串。--Ken Thompson 這句話中提到了兩點: 正則表示式是描述一組
大叔學ML第四:線性迴歸正則化
目錄 基本形式 梯度下降法中應用正則化項 正規方程中應用正則化項 小試牛刀 呼叫類庫 擴充套件 正則:正則是一個漢語詞彙,拼音為zhèng zé,基本意思是正其禮儀法則;正規;常規;正宗等。出自《楚辭·離騷》、《插圖本中國文學史》、《東京賦》等文獻。 —— 百度百科
iOS:詳細的正則表達式
bject for one 常用 一個 .cn 想要 bbb 公式 1、簡介: 在項目中,正則的使用是很普遍的,例如登錄賬號和密碼(手機號、郵箱等)。用到的方法就是謂詞對象過濾:NSPredicate。 2、什麽是正則表達式: 正則表達式,又稱正規表示法,是
HTML5前端入門教程:簡析正則表達式
分開 mail 出現 字符串匹配 很多 字符串操作 一個 來看 條件 很多人對正則表達式的印象都是用來做表單驗證的,這其實是不大準確的。正則表達式目前在很多軟件中都得到了廣泛的應用,包括Linux,Unix等操作系統,VB,Java,PHP等開發環境中,以及很多應用軟件都能
轉載:常見的正則表達式
控件 轉換 ret rip 提取 用戶 htm RR oar 匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z]數字:[0-9]匹配中文,英文字母和數字及_:^[\u4e00-\u9fa5_a-zA-Z0-9]+$同時判斷輸入長度:[\u4e00-\u9f
Python學習:13.Python正則表達式
tro 引擎 表達式 ups esx 位置 大小 split nco 一、正則表達式簡介 正則表達式是一個特殊的字符序列,它能幫助你方便的檢查一個字符串是否與某種模式匹配。 Python 自1.5版本起增加了re 模塊,它提供 Perl 風格的正則表達式模式。 就其
專案小結:手機郵箱正則,URL各種判斷返回頁面,input輸入框輸入符合卻獲取不到問題
1.手機郵箱正則 近兩年出來很多新號碼,聽說199什麼的都有了- -導致以前的正則不能用了....這就很難過,總是過一段時間出一種新號碼。因此,我決定使用返樸歸真的手機正則。 手機正則:var reg=/^1[0-9]\d{9}$/; 郵箱正則:var mailReg = /^[a-zA-Z0-9_.-
week4:函式之正則表示式
一、正則表示式 string提供的方法是完全匹配 引入正則表示式是模糊匹配,內嵌在python中,通過呼叫Re模組來實現 二、字元匹配(普通字元,元字元): 普通字元:大多數字符和字母都會和自身匹配 re.findall('alex','yuanalesalexduye') ##
以Grep學正則表示式 學習筆記
基本格式 grep -n -A2 -B3 --color=auto 'the' ./ 搜尋特定字串 grep -n 'the' //含 grep -vn 'the' //不含 grep -in 'the' //含大小寫 利用中括號 [] 來搜尋集合字元 grep -n
jmeter教程(八):關聯及正則表示式提取器
所謂關聯,就在從前面請求的響應中提取資料,給後面的請求使用。而提取資料,則需要用到後置處理器裡的正則表示式提取器。為了演示,我簡單寫了一個java請求,模擬介面的響應資料 響應的資料為一個json,這是模擬介面查詢會員列表的資料。time是查詢資料花費的時間,count是查詢出了多少條資料
效能比較:lxml庫,正則表示式,BeautifulSoup ,用資料證明lxml解析器速度快
Beautiful Soup支援的解析器 解析器 使用方法 優勢 劣勢 Python標準庫 BeautifulSoup(markup, "html.parse
【將進酒】良好的命名習慣是程式設計的第一步,古人云:名不正則言不順
專欄達人 授予成功建立個人部落格專欄
Python正則表示式:如何使用正則表示式
正則表示式(簡稱RE)本質上可以看作一個小的、高度專業化的程式語言,在Python中可以通過re模組使用它。使用正則表示式,你需要為想要匹配的字串集合指定一套規則,字串集合可以包含英文句子、e-mail地址、TeX命令或者其它任何你希望的字串。然後您能提這樣的問題:“這個字
iOS:使用NSRegularExpression正則去掉一串字串中所有的特殊字元和標點
/* 遍歷的模式,正則表示式匹配在指定options和range模式下匹配指定string,傳入block中可以獲取結果資訊 */ - (void)enumerateMatchesInString:(NSString *)string options:(NSMatchingOptions)options
非貪婪匹配:如何使用正則表示式碰到到第一個匹配到的字串就停止
? 當該字元緊跟在任何一個其他限制符(*,+,?,{n},{n,},{n,m})後面時,匹配模式是非貪婪的。非貪婪模式儘可能少的匹配所搜尋的字串,而預設的貪婪模式則儘可能多的匹配所搜尋的字串。例如,對於字串“oooo”,“o+”將盡可能多的匹配“o”,得到結果[
神經網路九:Regularization(正則化)與Dropout
本文主要講解神經網路中的正則化(Regularization)和Dropout,都是用了減小過擬合。正則化在機器學習領域中很重要。主要針對模型過擬合問題而提出來的。本文是觀看麥子學院的視訊整理而來。下
專案經驗:js 結合正則表示式判斷是否為電話號碼或者手機號碼
function Phone(obj){ var regBox = { regEmail : /^([a-z0 -9_\. -]+)@([\da -z\. -]+)\.([a -z\.]{2,6})$/, //郵箱
備忘:關於php正則匹配不成功的問題
某php程式的正則部分突然不能正常工作,除錯發現正則匹配失敗 仔細檢查後發現正則表示式無誤,但preg_match始終返回false。 翻手冊的時候看到了preg_last_error()函式,新增後發現返回值為PREG_BACKTRACK_LIMIT_ERROR 搜尋一番
shell文字過濾程式設計(一):grep和正則表示式
Linux系統中有很多檔案,比如配置檔案、日誌檔案、使用者檔案等。檔案中都包含了大量的資訊,我們可以使用cat等命令輕鬆將其輸出到螢幕,但如果要從檔案中分析或提取資料,還需要其他工具來實現。而linux正好提供了這些工具:grep、awk、sed等。把這些工具使用好,可以
ES6學習筆記:字串、正則、數值、函式和陣列的擴充套件
字串的擴充套件 includes():返回布林值,表示是否找到了引數字串。 startsWith():返回布林值,表示引數字串是否在原字串的頭部。 endsWith():返回布林值,表示引數字串是否在原字串的尾部。 let s = 'Hello wo