PHPjavascript
正則表達式中包含三種元素分別爲:量詞、元字符、修飾符
量詞
語法 描述java
元字符
語法 描述
[a-z] 匹配任何包含小寫字母 a-z的字符串
[A-Z] 匹配任何包含大寫字母 A-Z的字符串
[0-9] 匹配任何包含數字 0-9 的字符串
[abc] 匹配任何包含小寫字母 a、b、c的字符串
[âbc] 匹配任何不包含小寫字母 a、b、c的字符串
[a-zA-Z0-9_]匹配任何包含 a-zA-Z0-9 和下劃線的字符串
\w 匹配任何包含 a-zA-Z0-9 和下劃線的字符串(同上)
\W 匹配任何沒有下劃線和字母數字的字符串
\d 匹配任何數字字符,和[0-9]相同
\D 匹配任何非數字字符,和[^0-9]相同
\s 匹配任何空白字符
\S 匹配任何非空白字符
\b 匹配是否到達了單詞邊界
\B 匹配是否沒有達到單詞邊界
\ 匹配正則中的特殊字符python
修飾符
語法 描述
i 完成不區分大小寫的搜索
m 在匹配首內容或者尾內容時候採用多行識別匹配
x 忽略正則中的空白
A 強制從頭開始匹配
U 禁止貪婪匹配 只跟蹤到最近的一個匹配符並結束linux
* preg_filter — 執行一個正則表達式搜索和替換 * preg_grep — 返回匹配模式的數組條目 * preg_last_error — 返回最後一個PCRE正則執行產生的錯誤代碼 * preg_match_all — 執行一個全局正則表達式匹配 * preg_match — 執行一個正則表達式匹配 * preg_quote — 轉義正則表達式字符 * preg_replace_callback — 執行一個正則表達式搜索而且使用一個回調進行替換 * preg_replace — 執行一個正則表達式的搜索和替換 * preg_split — 經過一個正則表達式分隔字符串
$pattern = '/([\d])\/([\d])\/([\d]*)/';
$string = '26/06/2014';
echo preg_replace($pattern, "$3/$2/$1", $string);git
javascript正則表達式
建立方式: 1. var pattern = new RegExp('box'); var pattern = new RegExp('box','ig'); 2. var pattern = /box/; var pattern = /box/ig;
模式修飾符的可選參數
參數 含義
i 忽略大小寫
g 全局匹配
m 多行匹配shell
RegExp 對象的方法
方法 功能
test 在字符串中測試模式匹配,返回 true 或 false
exec 在字符串中執行匹配搜索,返回結果數組
例1: var pattern = /box/i;
var str = "This is a Box!";
alert(pattern.test(str));
例2: var pattern = /box/i;
var str = "This is a Box!";
alert(pattern.exec(str));express
String 對象也提供了 4 個使用正則表達式的方法。數組
方法 含義
match(pattern) 返回 pattern 中的子串或 null
replace(pattern, replacement) 用 replacement 替換 pattern
search(pattern) 返回字符串中 pattern 開始位置
split(pattern) 返回字符串按指定 pattern 拆分的數組bash
RegExp 對象的靜態屬性
屬性 短名 含義
input $_ 當前被匹配的字符串
lastMatch $& 最後一個匹配字符串
lastParen $+ 最後一對圓括號內的匹配子串
leftContext $` 最後一次匹配前的子串
multiline $* 用於指定是否全部的表達式都用於多行的布爾值
rightContext $' 在上次匹配以後的子串
單個字符和數字
元字符/元符號 匹配狀況
. 匹配除換行符外的任意字符
[a-z0-9] 匹配括號中的字符集中的任意字符
[â-z0-9] 匹配任意不在括號中的字符集中的字符
\d 匹配數字
\D 匹配非數字,同[^0-9]相同
\w 匹配字母和數字及
\W 匹配非字母和數字及
字符類:空白字符
元字符/元符號 匹配狀況
\0 匹配 null 字符
\b 匹配空格字符
\f 匹配進紙字符
\n 匹配換行符
\r 匹配回車字符
\t 匹配製表符
\s 匹配空白字符、空格、製表符和換行符
\S 匹配非空白字符
字符類:錨字符
元字符/元符號 匹配狀況
^ 行首匹配
$ 行尾匹配
\A 只有匹配字符串開始處
\b 匹配單詞邊界,詞在[]內時無效
\B 匹配非單詞邊界
\G 匹配當前搜索的開始位置
\Z 匹配字符串結束處或行尾
\z 只匹配字符串結束處
字符類:重複字符
元字符/元符號 匹配狀況
x? 匹配 0 個或 1 個 x
x* 匹配 0 個或任意多個 x
x+ 匹配至少一個 x
(xyz)+ 匹配至少一個(xyz)
x{m,n} 匹配最少 m 個、最多 n 個 x
字符類:替代字符
元字符/元符號 匹配狀況
this|where|logo 匹配 this 或 where 或 logo 中任意一個
字符類:記錄字符
元字符/元符號 匹配狀況
(string) 用於反向引用的分組
\1 或$1 匹配第一個分組中的內容
\2 或$2 匹配第二個分組中的內容
\3 或$3 匹配第三個分組中的內容
var pattern = /(\d)\/(\d)\/(\d*)/;
var str = '26/06/2014';
var result = str.replace(pattern,'$3/$2/$1');
alert(result);
linux
字符類表明意義[:alnum:]表明英文大小寫字符及數字,即0-9,A-Z,a-z[:alpha:]表明任何英文大小字符,即A-Z,a-z[:lower:]表明小寫字符,即a-z[:upper:]表明大寫字符,即A-Z[:digit:]表明數字,即0-9[:xdigit:]表明十六進制的數字類型,所以包括0-9,A-F,a-f的數字與字符[:blank:]表明空格鍵與tab按鍵[:graph:]除了空格與tab按鍵以外的其它全部按鍵[:space:]任何會產生空白的字符,包括空格鍵,Tab鍵,CR等[:cntrl:]表明鍵盤上面的控制按鍵,既包括CR,LF,Tab,Del等[:print:]表明任意可打印字符[:punct:]表明標點符號,即" ' ? ! ; : # $
基礎正則表達式語法(RE語法):一個字符串若是是正則表達式表示的,則其中的任意字符被稱爲RE字符。
特殊字符爲:
只支持普通正則表達式語法 ^ $ . \ [ ] " '
支持擴展正則表達式語法 ^ $ . \ [ ] " ' + ? | ( ) 基礎RE字符意義與範例^word
意義:待查找的字符串(word)在行首
範例:查找行首爲#開頭的哪一行,並列出行號
grep -n '^#' regular_express.txtword$
意義:待查找的字符串(word)在行尾
範例:將行尾爲!的那一行打印出來,並列出行號
grep -n '!$' regular_express.txt.
意義:表明必定有一個任意字符的字符(除換行符),在awk中可匹配換行符
範例:查找的字符串可使(eve)(eae)(eee)等,即e與e之間必定要有一個字符,不能是(ee)!
grep -n 'e.e' regular_express.txt \
意義:轉義字符,將特殊符號的特殊意義去除,將普通字符變爲特殊字符。
範例:查找含有單引號'的那一行
grep -n \' regular_express.txt
意義:重複0個到無窮多個前一個字符
範例:找出含有(es)(ess)(esss)等的字符串,注意,由於能夠是0個,因此es也是符合待查找字符串。另外,由於爲重複「前一個RE字符」的符號,所以在以前必定要緊接着一個RE字符!例如任意字符則爲.
grep -n 'ess' regular_express.txt[list]
意義:從字符集合的RE字符裏面找出想要選取的字符(不包括換行符),在awk中能夠包含換行符。注意此時中括號裏的.*等特殊字符均變成通常字符(除了[])。
範例:查找含有(gl)或(gd)的那一行,須要特別留意的是,在[]當中表明一個待查找的字符,例如「a[afl]y」表明查找的字符串能夠是aay,afy,或aly
grep -n 'g[ld]' regular_express.txt[n1-n2]
意義:從字符集和的RE字符裏面找出想要選取的字符範圍
範例:查找含有任意數字的那一行。需特別留意,在字符集合[]中的減號-是有特殊含義的,它表明兩個字符之間的全部連續字符(與編碼順序有關)
grep -n '[0-9]' regular_express.txt[^list]
意義:反向選擇
範例:查找的字符串能夠是(oog)(ood)但不能是(oot)
grep -n 'oo[^t]' regular_express.txt
{n}
{n,}
{n,m}
意義:連續n到m個的前一個RE字符,若爲{n}則是連續n個的前一個RE字符,若爲{n,}則是連續n個以上的前一個RE字符 。
在支持擴展的正則表達式中用另外一種形式,且n,m必須是0到255之間的整數:
注:本質上是擴展正則表達式的語法
範例:在g與g之間有2個到3個的o存在的字符串
grep -n 'go{2,3}' regular_express.txt
4 擴展的正則表達式語法
若要支持:
grep需加-E (或者使用到擴展符號時加\)
sed需加-r (或者使用到擴展符號時加\)
awk,perl自己支持擴展這則表達式(也就是說awk中若是要引用(爲普通字符要[(]如此使用。)擴展RE字符意義與範例+
意義:重複一個或一個以上的前一個RE字符
o+表明一個以上的o?
意義:零個或一個的前一個RE字符
o?表明空或o|
意義:用或(or)的方式找出數個字符串,兩邊的字符串不能加額外的空格,
ABC|DEF表示ABC或DEF,A(BC|DE)F表示ABCF或ADEF
範例:去除空白行和行首爲#的行
grep -Env '^$|^#' regular_express.txt ()
意義:找出「組」字符串,[]的引伸
範例:查找glad或good這兩個字符串,由於g與d是重複的,因此能夠將la與oo以或的方式列於()中
grep -En 'g(la|oo)d' regular_express.txt ()+意義:重複一個或一個以上的前一個「組」
{n}
{n,}
{n,m}與普通正則表達式含義一致,只是在支持擴展正則表達式中要用此形式,即awk、grep -E、sed -r 中使用。
5,元字符
元字符:是一種perl風格的正則表達式,只有一部分文本處理工具支持它,並非全部的工具都支持。
至關於[字符集]的簡寫。元字符意義和範例\b
意義:單詞邊界
範例:\bcool\b匹配cool但不匹配coolant,特殊字符後面不能加 ? +等量詞\B
意義:非單詞邊界
範例:cool\B匹配coolant但不匹配cool,特殊字符後面不能加 ? +等量詞\d
意義:單個數字字符
範例:b\db匹配b2b,但不匹配bcb\D
意義:單個非數字字符
範例:b\Db匹配bcb,但不匹配b2b\w
意義:單個單詞字符(字母、數字與_)
範例:\w匹配1或a等,但不匹配%等\W意義:單個非單詞字符\n意義:換行符\s意義:單個空白字符,換頁、製表、換行、回車以及空格。[\f\t\n\r ]\S意義:單個非空白字符\r意義:回車
6,幾種有用的正則表達式項目正則表達式匹配正規文本中的單詞
\b[[:alpha:]]+\b
或
(^| )["({[]book[]})"?,.:;!'s ]( |$)匹配空行^$匹配含有空格的空白行和空行^空格$匹配整個行^.$匹配一個或多個空格空格空格匹配s前面含有任意abc隨機組合的字符串[abc]s匹配格式化的美圓數額\$[空格0-9]*.[0-9][0-9]匹配電子郵件地址[A-Za-z0-9.]+@[A-Za-z0-9.]+.[a-zA-Z]{2,4}匹配一個HTTP URLhttp://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}
linux通配符
shell通配符
注意,這裏的通配符雖然和正則表達式類似,可是是基於bash解釋器解析的,而正則表達式由正則引擎的軟件(如awk,grep,sed等)解析,兩者徹底不一樣。
通配符字符
*表明0個或多個任意字符?表明必定有一個任意字符[ ][abcd],表示一個字符,或a或b或c或d[-][0-9],表示一個數字,0到9之間的某個[^][^abc],表示一個字符,且不是a、b、c
範例:
[python] view plaincopy
uname -r
/kernel/drivers # 系統先執行 uname -r 找出輸出結果;將結果累加在目錄上面,來執行 cd 的功能! 正則表達式(regular express)基本上是一種「表示法」,他是以行爲單位來進行字符串的處理行爲。只能使用在支持它的工具程序(如vi、grep、awk、sed中)。正則表達式與shell通配符的關係就像是局部變量和全局變量的關係(即之後遇到一個命令若是支持正則表達式,則通配符概念拋棄。不然使用通配符)。
更多文章請關注:http://www.ilovehai.com