句點符号 '.' ——比對任意一個(隻有一個)字元(包括空格)。
例如:t.n,它比對tan、 ten、tin和ton,還比對t#n、tpn甚至t n,還有其他許多無意義的組合。
Matlab例子程式:
clear;clc
str='ten,&8yn2tin6ui>&ton, t n,-356tpn,
t#n,4@).,t@nT&nY';
pat='t.n';
[o11,o22,o33]=regexpi(str,pat,'start','end','match');%輸出起始位置和子串
方括号符号 '[oum]' ——比對方括号中的任意一個
例如:t[aeio]n隻比對tan,Ten,tin和toN等。
方括号中的連接配接符 '[c1-c2]' ——比對從字元c1開始到字元c2結束的字母序列
5 \w,\s和\d——類表達式
和上面的\n等表中的轉義字元有所不同,\w,\s,\d等比對的不是某個特定的字元,而是某一類字元。具體說明如下:
\w比對任意的單個文字字元,相當于[a-zA-Z0-9_];
\s比對任意的單個空白字元,相當于[\t\f\n\r];
\d比對任意單個數字,相當于[0-9];
\S比對除空白符以外的任意單個字元,相當于[^\t\f\n\r]——方括号中的^表示取反;
\W比對任意單個字元,相當于[^a-zA-Z0-9_];
\D比對除數字字元外的任意單個字元,相當于[^0-9]。
expr? 與expr比對的元素出現0或1次,相當于{0,1}
expr* 與expr比對的元素出現1次或更多,相當于{0,}
expr+ 與expr比對的元素出現1次或更多,相當于{1,}
expr{n} 與expr比對的元素出現n次,相當于{n,n}
expr{n,} 與expr比對的元素至少出現n次
expr{n,m} 與expr比對的元素出現n次但不多于m次
regexp(str,'<.*?>','match')
regexp(str,'<.*>','match')
邏輯運算符
(expr) 将expr标記為一組、比對expr,并将比對的字元子串标記起來以供後面使用。
(?:expr) 說明expr為一組,相當于數學表達式中的()
例如:?lstr='A body or collection of such stories';
?regexp(lstr,'(?:[^aeiou][aeiou]){2,}','match')
ans =
'tori'
上面的表達式中{2,}對[^aeiou][aeiou]起作用,如果去掉分組,則隻對[aeiou]起作用,如下所示:
?regexp(lstr,'[^aeiou][aeiou]{2,}','match')
'tio' 'rie'
(?>expr) expr中的每個元素是一個分組
(?#expr) expr放在(?#和)之間是就是注釋。
^expr 比對expr,并且出現在原字元串最前端的子串
expr$ 比對expr,并且出現在原字元串最末端的子串
<expr 比對expr,并且出現在一個單詞最前端的子串
expr> 比對expr,并且出現在一個單詞最末端的子串
<expr> 更嚴格的單詞比對,如:以s開頭,并且以h結尾的單詞
?regexpi(hstr, '<s\w*h>', 'match')
'such'
3. 左顧右盼——利用上下文比對
這個也比較容易了解。就是利用上下文的比對來找到我們要找的内容。
expr1(?=expr2) 找到比對expr1的子串,如果其後的字元串也比對expr2
如,下面的例子查找所有在','之前的單詞。
? pstr = ['While I nodded, nearly napping, ' …
'suddenly there came a tapping,'];
?regexpi(pstr, '\w*(?=,)', 'match')
'nodded' 'napping' 'tapping'
expr1(?!expr2) 找到比對expr1的子串如果其後的字元串不比對expr2
下面的例子比對所有不在','之前的單詞
?regexpi(pstr, '\w*+(?!,)', 'match')
ans =
Columns 1 through 6
'While' 'I' 'nearly' 'suddenly' 'there' 'came'
Column 7
'a'
(?<=expr1)expr2 找到比對expr2的子串,如果其前面的字元串也比對expr1
下面的例子查找所有在','之後的單詞,注意:','之後可能有空格
?regexpi(pstr,'(?<=,\s*)\w*','match')
'nearly' 'suddenly'
(?<!expr1)expr2 找到比對expr2的子串,如果其後的字元串不比對expr1
下面的例子查找所有不在','之後的單詞,
?regexpi(pstr,'(?<!,\s*)\w*','match')
'While' 'I' 'nodded' 'early' 'napping' 'uddenly'
Columns 7 through 10
'there' 'came' 'a' 'tapping'
應課程實驗要求,要寫一個基于人人網的簡單爬蟲。實驗要求如下:
學會使用一種程式設計語言實作爬取人人網關系網絡的程式。該程式功能如下:
1. 能夠輸入使用者登陸所産生的cookie,允許爬蟲對人人網進行爬取網頁。
2. 能夠使用正規表達式對所擷取的網頁内容進行過濾,提取出所需要的重要資訊。
3. 能夠分析所獲得資訊,得到社交網絡中各個個體之間的好友關系。
4. 能夠将該關系矩陣導入到matlab中,以供資料分析使用。
一個正規表達式,就是用某種模式去比對一類字元串的一個公式。
在最簡單的情況下,一個正規表達式看上去就是一個普通的查找串。例如,正規表達式"testing"中沒有包含任何元字元,它可以比對"testing"和"123testing"等字元串,但是不能比對"Testing"。
正規表達式用于字元串處理、表單驗證等場合,實用高效。現将一些常用的表達式收集于此,以備不時之需。
比對中文字元的正規表達式: [/u4e00-/u9fa5]
評注:比對中文還真是個頭疼的事,有了這個表達式就好辦了
比對雙位元組字元(包括漢字在内):[^/x00-/xff]
評注:可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)
比對空白行的正規表達式:/n/s*/r
評注:可以用來删除空白行
比對HTML标記的正規表達式:<(/S*?)[^>]*>.*?<//1>|<.*? />
評注:網上流傳的版本太糟糕,上面這個也僅僅能比對部分,對于複雜的嵌套标記依舊無能為力
比對首尾空白字元的正規表達式:^/s*|/s*$
評注:可以用來删除行首行尾的空白字元(包括空格、制表符、換頁符等等),非常有用的表達式
比對Email位址的正規表達式:/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*
評注:表單驗證時很實用
比對網址URL的正規表達式:[a-zA-z]+://[^/s]*
評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求
比對帳号是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
比對國内電話号碼:/d{3}-/d{8}|/d{4}-/d{7}
評注:比對形式如 0511-4405222 或 021-87888822
比對騰訊QQ号:[1-9][0-9]{4,}
評注:騰訊QQ号從10000開始
比對中國郵政編碼:[1-9]/d{5}(?!/d)
評注:中國郵政編碼為6位數字
比對身份證:/d{15}|/d{18}
評注:中國的身份證為15位或18位
比對ip位址:/d+/./d+/./d+/./d+
評注:提取ip位址時有用
比對特定數字:
^[1-9]/d*$ //比對正整數
^-[1-9]/d*$ //比對負整數
^-?[1-9]/d*$ //比對整數
^[1-9]/d*|0$ //比對非負整數(正整數 + 0)
^-[1-9]/d*|0$ //比對非正整數(負整數 + 0)
^[1-9]/d*/./d*|0/./d*[1-9]/d*$ //比對正浮點數
^-([1-9]/d*/./d*|0/./d*[1-9]/d*)$ //比對負浮點數
^-?([1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0)$ //比對浮點數
^[1-9]/d*/./d*|0/./d*[1-9]/d*|0?/.0+|0$ //比對非負浮點數(正浮點數 + 0)
^(-([1-9]/d*/./d*|0/./d*[1-9]/d*))|0?/.0+|0$ //比對非正浮點數(負浮點數 + 0)
評注:處理大量資料時有用,具體應用時注意修正
比對特定字元串:
^[A-Za-z]+$ //比對由26個英文字母組成的字元串
^[A-Z]+$ //比對由26個英文字母的大寫組成的字元串
^[a-z]+$ //比對由26個英文字母的小寫組成的字元串
^[A-Za-z0-9]+$ //比對由數字和26個英文字母組成的字元串
^/w+$ //比對由數字、26個英文字母或者下劃線組成的字元串
評注:最基本也是最常用的一些表達式
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。
本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/6291685.html,如需轉載請自行聯系原作者