溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php、linux、javascript 正則表達(dá)式

發(fā)布時(shí)間:2020-07-07 15:50:26 來源:網(wǎng)絡(luò) 閱讀:479 作者:shenjiejie 欄目:開發(fā)技術(shù)

PHP

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

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

元字符
語法 描述
[a-z] 匹配任何包含小寫字母 a-z的字符串
[A-Z] 匹配任何包含大寫字母 A-Z的字符串
[0-9] 匹配任何包含數(shù)字 0-9 的字符串
[abc] 匹配任何包含小寫字母 a、b、c的字符串
[abc] 匹配任何不包含小寫字母 a、b、c的字符串
[a-zA-Z0-9_]匹配任何包含 a-zA-Z0-9 和下劃線的字符串
\w 匹配任何包含 a-zA-Z0-9 和下劃線的字符串(同上)
\W 匹配任何沒有下劃線和字母數(shù)字的字符串
\d 匹配任何數(shù)字字符,和[0-9]相同
\D 匹配任何非數(shù)字字符,和[^0-9]相同
\s 匹配任何空白字符
\S 匹配任何非空白字符
\b 匹配是否到達(dá)了單詞邊界
\B 匹配是否沒有達(dá)到單詞邊界
\ 匹配正則中的特殊字符

修飾符
語法 描述
i 完成不區(qū)分大小寫的搜索
m 在匹配首內(nèi)容或者尾內(nèi)容時(shí)候采用多行識(shí)別匹配
x 忽略正則中的空白
A 強(qiáng)制從頭開始匹配
U 禁止貪婪匹配 只跟蹤到最近的一個(gè)匹配符并結(jié)束

* preg_filter — 執(zhí)行一個(gè)正則表達(dá)式搜索和替換
* preg_grep — 返回匹配模式的數(shù)組條目
* preg_last_error — 返回最后一個(gè)PCRE正則執(zhí)行產(chǎn)生的錯(cuò)誤代碼
* preg_match_all — 執(zhí)行一個(gè)全局正則表達(dá)式匹配
* preg_match — 執(zhí)行一個(gè)正則表達(dá)式匹配
* preg_quote — 轉(zhuǎn)義正則表達(dá)式字符
* preg_replace_callback — 執(zhí)行一個(gè)正則表達(dá)式搜索并且使用一個(gè)回調(diào)進(jìn)行替換
* preg_replace — 執(zhí)行一個(gè)正則表達(dá)式的搜索和替換
* preg_split — 通過一個(gè)正則表達(dá)式分隔字符串

$pattern = '/([\d])\/([\d])\/([\d]*)/';
$string = '26/06/2014';
echo preg_replace($pattern, "$3/$2/$1", $string);

javascript

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

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

RegExp 對(duì)象的方法
方法 功能
test 在字符串中測試模式匹配,返回 true 或 false
exec 在字符串中執(zhí)行匹配搜索,返回結(jié)果數(shù)組
例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 對(duì)象也提供了 4 個(gè)使用正則表達(dá)式的方法。

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

RegExp 對(duì)象的靜態(tài)屬性
屬性 短名 含義
input $_ 當(dāng)前被匹配的字符串
lastMatch $& 最后一個(gè)匹配字符串
lastParen $+ 最后一對(duì)圓括號(hào)內(nèi)的匹配子串
leftContext $` 最后一次匹配前的子串
multiline $* 用于指定是否所有的表達(dá)式都用于多行的布爾值
rightContext $' 在上次匹配之后的子串

單個(gè)字符和數(shù)字
元字符/元符號(hào) 匹配情況
. 匹配除換行符外的任意字符
[a-z0-9] 匹配括號(hào)中的字符集中的任意字符
[a-z0-9] 匹配任意不在括號(hào)中的字符集中的字符
\d 匹配數(shù)字
\D 匹配非數(shù)字,同[^0-9]相同
\w 匹配字母和數(shù)字及
\W 匹配非字母和數(shù)字及

字符類:空白字符
元字符/元符號(hào) 匹配情況
\0 匹配 null 字符
\b 匹配空格字符
\f 匹配進(jìn)紙字符
\n 匹配換行符
\r 匹配回車字符
\t 匹配制表符
\s 匹配空白字符、空格、制表符和換行符
\S 匹配非空白字符

字符類:錨字符
元字符/元符號(hào) 匹配情況
^ 行首匹配
$ 行尾匹配
\A 只有匹配字符串開始處
\b 匹配單詞邊界,詞在[]內(nèi)時(shí)無效
\B 匹配非單詞邊界
\G 匹配當(dāng)前搜索的開始位置
\Z 匹配字符串結(jié)束處或行尾
\z 只匹配字符串結(jié)束處

字符類:重復(fù)字符
元字符/元符號(hào) 匹配情況
x? 匹配 0 個(gè)或 1 個(gè) x
x* 匹配 0 個(gè)或任意多個(gè) x
x+ 匹配至少一個(gè) x
(xyz)+ 匹配至少一個(gè)(xyz)
x{m,n} 匹配最少 m 個(gè)、最多 n 個(gè) x

字符類:替代字符
元字符/元符號(hào) 匹配情況
this|where|logo 匹配 this 或 where 或 logo 中任意一個(gè)

字符類:記錄字符
元字符/元符號(hào) 匹配情況
(string) 用于反向引用的分組
\1 或$1 匹配第一個(gè)分組中的內(nèi)容
\2 或$2 匹配第二個(gè)分組中的內(nèi)容
\3 或$3 匹配第三個(gè)分組中的內(nèi)容
var pattern = /(\d)\/(\d)\/(\d*)/;
var str = '26/06/2014';
var result = str.replace(pattern,'$3/$2/$1');
alert(result);

linux

字符類代表意義[:alnum:]代表英文大小寫字符及數(shù)字,即0-9,A-Z,a-z[:alpha:]代表任何英文大小字符,即A-Z,a-z[:lower:]代表小寫字符,即a-z[:upper:]代表大寫字符,即A-Z[:digit:]代表數(shù)字,即0-9[:xdigit:]代表十六進(jìn)制的數(shù)字類型,因此包括0-9,A-F,a-f的數(shù)字與字符[:blank:]代表空格鍵與tab按鍵[:graph:]除了空格與tab按鍵之外的其它所有按鍵[:space:]任何會(huì)產(chǎn)生空白的字符,包括空格鍵,Tab鍵,CR等[:cntrl:]代表鍵盤上面的控制按鍵,既包括CR,LF,Tab,Del等[:print:]代表任意可打印字符[:punct:]代表標(biāo)點(diǎn)符號(hào),即" ' ? ! ; : # $

基礎(chǔ)正則表達(dá)式語法(RE語法):一個(gè)字符串如果是正則表達(dá)式表示的,則其中的任意字符被稱為RE字符。

特殊字符為:
只支持普通正則表達(dá)式語法 ^ $ . \ [ ] " '
支持?jǐn)U展正則表達(dá)式語法 ^ $ .
\ [ ] " ' + ? | ( ) 基礎(chǔ)RE字符意義與范例^word
意義:待查找的字符串(word)在行首
范例:查找行首為#開頭的哪一行,并列出行號(hào)
grep -n '^#' regular_express.txtword$
意義:待查找的字符串(word)在行尾
范例:將行尾為!的那一行打印出來,并列出行號(hào)
grep -n '!$' regular_express.txt.
意義:代表一定有一個(gè)任意字符的字符(除換行符),在awk中可匹配換行符
范例:查找的字符串可以使(eve)(eae)(eee)等,即e與e之間一定要有一個(gè)字符,不能是(ee)!
grep -n 'e.e' regular_express.txt \
意義:轉(zhuǎn)義字符,將特殊符號(hào)的特殊意義去除,將普通字符變?yōu)樘厥庾址?br/>范例:查找含有單引號(hào)'的那一行
grep -n \' regular_express.txt
意義:重復(fù)0個(gè)到無窮多個(gè)前一個(gè)字符
范例:找出含有(es)(ess)(esss)等的字符串,注意,因?yàn)?/em>可以是0個(gè),所以es也是符合待查找字符串。另外,因?yàn)?em>為重復(fù)“前一個(gè)RE字符”的符號(hào),因此在
之前一定要緊接著一個(gè)RE字符!例如任意字符則為.
grep -n 'ess
' regular_express.txt[list]
意義:從字符集合的RE字符里面找出想要選取的字符(不包括換行符),在awk中可以包含換行符。注意此時(shí)中括號(hào)里的.*等特殊字符均變成一般字符(除了[])。
范例:查找含有(gl)或(gd)的那一行,需要特別留意的是,在[]當(dāng)中代表一個(gè)待查找的字符,例如“a[afl]y”代表查找的字符串可以是aay,afy,或aly
grep -n 'g[ld]' regular_express.txt[n1-n2]
意義:從字符集和的RE字符里面找出想要選取的字符范圍
范例:查找含有任意數(shù)字的那一行。需特別留意,在字符集合[]中的減號(hào)-是有特殊含義的,它代表兩個(gè)字符之間的所有連續(xù)字符(與編碼順序有關(guān))
grep -n '[0-9]' regular_express.txt[^list]
意義:反向選擇
范例:查找的字符串可以是(oog)(ood)但不能是(oot)
grep -n 'oo[^t]' regular_express.txt
{n}
{n,}
{n,m}
意義:連續(xù)n到m個(gè)的前一個(gè)RE字符,若為{n}則是連續(xù)n個(gè)的前一個(gè)RE字符,若為{n,}則是連續(xù)n個(gè)以上的前一個(gè)RE字符 。
在支持?jǐn)U展的正則表達(dá)式中用另一種形式,且n,m必須是0到255之間的整數(shù):
注:本質(zhì)上是擴(kuò)展正則表達(dá)式的語法
范例:在g與g之間有2個(gè)到3個(gè)的o存在的字符串
grep -n 'go{2,3}' regular_express.txt
4 擴(kuò)展的正則表達(dá)式語法
若要支持:
grep需加-E (或者使用到擴(kuò)展符號(hào)時(shí)加\)
sed需加-r (或者使用到擴(kuò)展符號(hào)時(shí)加\)

awk,perl本身支持?jǐn)U展這則表達(dá)式(也就是說awk中如果要引用(為普通字符要[(]如此使用。)擴(kuò)展RE字符意義與范例+
意義:重復(fù)一個(gè)或一個(gè)以上的前一個(gè)RE字符
o+代表一個(gè)以上的o?
意義:零個(gè)或一個(gè)的前一個(gè)RE字符
o?代表空或o|
意義:用或(or)的方式找出數(shù)個(gè)字符串,兩邊的字符串不能加額外的空格,
ABC|DEF表示ABC或DEF,A(BC|DE)F表示ABCF或ADEF
范例:去除空白行和行首為#的行
grep -Env '^$|^#' regular_express.txt ()
意義:找出“組”字符串,[]的引申
范例:查找glad或good這兩個(gè)字符串,因?yàn)間與d是重復(fù)的,所以可以將la與oo以或的方式列于()中
grep -En 'g(la|oo)d' regular_express.txt ()+意義:重復(fù)一個(gè)或一個(gè)以上的前一個(gè)“組”
{n}
{n,}
{n,m}與普通正則表達(dá)式含義一致,只是在支持?jǐn)U展正則表達(dá)式中要用此形式,即awk、grep -E、sed -r 中使用。
5,元字符

元字符:是一種perl風(fēng)格的正則表達(dá)式,只有一部分文本處理工具支持它,并不是所有的工具都支持。
相當(dāng)于[字符集]的簡寫。元字符意義和范例\b
意義:單詞邊界
范例:\bcool\b匹配cool但不匹配coolant,特殊字符后面不能加 ? +等量詞\B
意義:非單詞邊界
范例:cool\B匹配coolant但不匹配cool,特殊字符后面不能加
? +等量詞\d
意義:單個(gè)數(shù)字字符
范例:b\db匹配b2b,但不匹配bcb\D
意義:單個(gè)非數(shù)字字符
范例:b\Db匹配bcb,但不匹配b2b\w
意義:單個(gè)單詞字符(字母、數(shù)字與_)
范例:\w匹配1或a等,但不匹配%等\W意義:單個(gè)非單詞字符\n意義:換行符\s意義:單個(gè)空白字符,換頁、制表、換行、回車以及空格。[\f\t\n\r ]\S意義:單個(gè)非空白字符\r意義:回車
6,幾種有用的正則表達(dá)式項(xiàng)目正則表達(dá)式匹配正規(guī)文本中的單詞
\b[[:alpha:]]+\b

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

linux通配符
shell通配符
注意,這里的通配符雖然和正則表達(dá)式相似,但是是基于bash解釋器解析的,而正則表達(dá)式由正則引擎的軟件(如awk,grep,sed等)解析,二者完全不同。

通配符字符

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

范例:

[python] view plaincopy

  1. [root@linux ~]# ls test #那個(gè) 代表后面不論接幾個(gè)字符都予以接受
  2. [root@linux ~]# ls test? #那個(gè) ? 代表后面"一定"要接"一個(gè)"字符
  3. [root@linux ~]# ls test??? #那個(gè) ??? 代表"一定要接三個(gè)"字符!
  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 # 系統(tǒng)先執(zhí)行 uname -r 找出輸出結(jié)果;將結(jié)果累加在目錄上面,來執(zhí)行 cd 的功能!
  7. = cd /lib/modules/$(uname -r)/kernel #另外,這個(gè) quot (`) 的功能,也可以利用 $() 來取代喔!
  8. [root@linux ~]# cp [A-Z] /tmp #表示文件中包含大寫字母
  9. [root@linux ~]# ls -lda /etc/[35] #表示文件中包含數(shù)字3或者5.

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

更多文章請(qǐng)關(guān)注:http://www.ilovehai.com

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI