php、linux、javascript Regex

來源:互聯網
上載者:User

標籤:php   linux   javascript   正則   

PHP

Regex中包含三種元素分別為:量詞、元字元、修飾符
量詞
文法 描述

  • 匹配任何至少包含一個前置字串
  • 匹配任何包含零個或多個前置字串
    ? 匹配任何包含零個或一個前置字串
    . 匹配任一字元串
    {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 — 執行一個Regex搜尋和替換* preg_grep — 返回匹配模式的數組條目* preg_last_error — 返回最後一個PCRE正則執行產生的錯誤碼* preg_match_all — 執行一個全域Regex匹配* preg_match — 執行一個Regex匹配* preg_quote — 轉義Regex字元* preg_replace_callback — 執行一個Regex搜尋並且使用一個回調進行替換* preg_replace — 執行一個Regex的搜尋和替換* preg_split — 通過一個Regex分隔字串

$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 個使用Regex的方法。

方法 含義
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:]代表標點符號,即" ‘ ? ! ; : # $

基礎Regex文法(RE文法):一個字串如果是Regex表示的,則其中的任一字元被稱為RE字元。

特殊字元為:
只支援普通Regex文法 ^ $ . \ [ ] " ‘
支援擴充Regex文法 ^ $ .
\ [ ] " ‘ + ? | ( ) 基礎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字元 。
在支援擴充的Regex中用另一種形式,且n,m必須是0到255之間的整數:
註:本質上是擴充Regex的文法
範例:在g與g之間有2個到3個的o存在的字串
grep -n ‘go{2,3}‘ regular_express.txt
4 擴充的Regex文法
若要支援:
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}與普通Regex含義一致,只是在支援擴充Regex中要用此形式,即awk、grep -E、sed -r 中使用。
5,元字元

元字元:是一種perl風格的Regex,只有一部分文本處理工具支援它,並不是所有的工具都支援。
相當於[字元集]的簡寫。元字元意義和範例\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,幾種有用的Regex項目Regex匹配正規文本中的單詞
\b[[:alpha:]]+\b

(^| )["({[]book[]})"?,.:;!‘s ]( |$)匹配空行^$匹配含有空格的空白行和空行^空格$匹配整個行^.$匹配一個或多個空格空格空格匹配s前面含有任意abc隨機組合的字串[abc]s匹配格式化的美元數額\$[空格0-9]*.[0-9][0-9]匹配電子郵件地址[A-Za-z0-9.][email protected][A-Za-z0-9.]+.[a-zA-Z]{2,4}匹配一個HTTP URLhttp://[a-zA-Z0-9-.]+.[a-zA-Z]{2,4}

linux萬用字元
shell萬用字元
注意,這裡的萬用字元雖然和Regex相似,但是是基於bash解譯器解析的,而Regex由正則引擎的軟體(如awk,grep,sed等)解析,二者完全不同。

萬用字元字元

*代表0個或多個任一字元?代表一定有一個任一字元[ ][abcd],表示一個字元,或a或b或c或d[-][0-9],表示一個數字,0到9之間的某個[^][^abc],表示一個字元,且不是a、b、c

範例:

[python] view plaincopy

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

Regex(regular express)基本上是一種“標記法”,他是以行為單位來進行字串的處理行為。只能使用在支援它的工具程式(如vi、grep、awk、sed中)。Regex與shell萬用字元的關係就像是局部變數和全域變數的關係(即以後遇到一個命令如果支援Regex,則萬用字元概念拋棄。否則使用萬用字元)。

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

php、linux、javascript Regex

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.