1. 程式人生 > >php、linux、javascript 正則表達式

php、linux、javascript 正則表達式

php linux javascript 正則

PHP

正則表達式中包含三種元素分別為:量詞、元字符、修飾符
量詞
語法 描述

  • 匹配任何至少包含一個前導字符串
  • 匹配任何包含零個或多個前導字符串
    ? 匹配任何包含零個或一個前導字符串
    . 匹配任意字符串
    {x} 匹配任何包含 x 個前導字符串
    {x,y} 匹配任何包含 x 到 y 個前導字符串
    {x,} 匹配任何包含至少 x 個前導字符串
    $ 匹配字符串的行尾
    ^ 匹配字符串的行首
    | 匹配字符串的左邊或者右邊
    () 包圍一個字符分組或定義個反引用,可以使用\1\2 提取

元字符
語法 描述
[a-z] 匹配任何包含小寫字母 a-z的字符串
[A-Z] 匹配任何包含大寫字母 A-Z的字符串
[0-9] 匹配任何包含數字 0-9 的字符串
[abc] 匹配任何包含小寫字母 a、b、c的字符串
[abc] 匹配任何不包含小寫字母 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 匹配是否沒有達到單詞邊界
\ 匹配正則中的特殊字符

修飾符
語法 描述
i 完成不區分大小寫的搜索
m 在匹配首內容或者尾內容時候采用多行識別匹配

x 忽略正則中的空白
A 強制從頭開始匹配
U 禁止貪婪匹配 只跟蹤到最近的一個匹配符並結束

* 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);

javascript

 創建方式:
      1. 
           var pattern = new RegExp(‘box‘);
           var pattern = new RegExp(‘box‘,‘ig‘);
      2.
           var pattern = /box/;
           var pattern = /box/ig;  

模式修飾符的可選參數
參數 含義
i 忽略大小寫
g 全局匹配
m 多行匹配

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));

String 對象也提供了 4 個使用正則表達式的方法。

方法 含義
match(pattern) 返回 pattern 中的子串或 null
replace(pattern, replacement) 用 replacement 替換 pattern
search(pattern) 返回字符串中 pattern 開始位置
split(pattern) 返回字符串按指定 pattern 拆分的數組

RegExp 對象的靜態屬性
屬性 短名 含義
input $_ 當前被匹配的字符串
lastMatch $& 最後一個匹配字符串
lastParen $+ 最後一對圓括號內的匹配子串
leftContext $` 最後一次匹配前的子串
multiline $* 用於指定是否所有的表達式都用於多行的布爾值
rightContext $‘ 在上次匹配之後的子串

單個字符和數字
元字符/元符號 匹配情況
. 匹配除換行符外的任意字符
[a-z0-9] 匹配括號中的字符集中的任意字符
[a-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

  1. [root@linux ~]# ls test #那個 代表後面不論接幾個字符都予以接受
  2. [root@linux ~]# ls test? #那個 ? 代表後面"一定"要接"一個"字符
  3. [root@linux ~]# ls test??? #那個 ??? 代表"一定要接三個"字符!
  4. [root@linux ~]# cp test[1-5] /tmp # 將 test1, test2, test3, test4, test5 若存在的話,就拷貝到 /tmp
  5. [root@linux ~]# cp test[!1-5] /tmp # 只要不是 test1, test2, test3, test4, test5 之外的其它 test?拷貝到 /tmp
  6. [root@linux ~]# cd /lib/modules/uname -r/kernel/drivers # 系統先執行 uname -r 找出輸出結果;將結果累加在目錄上面,來執行 cd 的功能!
  7. = cd /lib/modules/$(uname -r)/kernel #另外,這個 quot (`) 的功能,也可以利用 $() 來取代喔!
  8. [root@linux ~]# cp [A-Z] /tmp #表示文件中包含大寫字母
  9. [root@linux ~]# ls -lda /etc/[35] #表示文件中包含數字3或者5.

正則表達式(regular express)基本上是一種“表示法”,他是以行為單位來進行字符串的處理行為。只能使用在支持它的工具程序(如vi、grep、awk、sed中)。正則表達式與shell通配符的關系就像是局部變量和全局變量的關系(即以後遇到一個命令如果支持正則表達式,則通配符概念拋棄。否則使用通配符)。

更多文章請關註:http://www.ilovehai.com

php、linux、javascript 正則表達式