php正規表示式 ? 的三種少見用法

2021-10-07 04:44:17 字數 1554 閱讀 8060

我們已經知道括號可以捕捉匹配上的字串,並將它們存入變數之中,如果只想用括號將某部分進行分組?考慮這樣的正規表示式:只希望其中一部分括號中所匹配的 內容被存入記憶體變數中。在下面的例子中,我們希望「bronto」是可選擇的,為了將它變成可選擇的,我們需要將它用括號括起來。接著,模式使用了乙個模 式可以得到「steak」或者「burger」,匹配上的字串被存入記憶體變數中。

if(/(bronto)?saurus (steak|burger)/)

即便「bronto」沒有被匹配上,此部分仍然會存入$1。perl 統計開括號的個數,從而給這些變數命名。我們需要的部分被存入$2。當模式變複雜時,情況就變得非常複雜。

幸運的是,

perl 

的正規表示式有一種方法可以使括號只進行分組,而不會引起記憶體變數的分配。我們將它叫做非捕捉用的括號(

non- capturing parentheses

),對於它,有乙個特殊的寫法。我們在開括號後面加上乙個問號和冒號,

(?:)

,其作用是告訴

perl 

括號只是分組的作用。(

這部分看了也就差不多了)

◆這是?號在正規表示式中的第四種用法:

改變上述正規表示式,使之對「bronto」是非捕捉用的括號,我們需要的部分被存入變數$1。

if(/(?:bronto)?saurus (steak|burger)/)

如果以後需要改變正規表示式,如在brontosaurs burger 上再加入barbecue,我們可以加入「bbq 」(含有空格),並且使括號是 非捕捉用的,那麼我們需要的部分所對應的記憶體變數仍為$1。否則,可能每一次在正規表示式中加入括號時,需要改變記憶體變數名。

if (/(?:bronto)?saurus (?:bbq )?(steak|burger)/)

預見匹配

簡單說,就是匹配時考慮預見匹配的那一部分,不符合的不能算匹配上,但匹配的結果部分(變數$&)要除去預見匹配部分,又分兩種。

1 肯定預見匹配

/pattern(?=string)/;

匹配時,要考慮符合

string

遇見功能,"?=",意識說目標串中肯定存在什麼,比如:

var str="ab4";

var reg=/ab(?=\d)/g

alert(reg.test(str));//結果為true意思是第三位肯定是數字;

2 否定預見匹配

/pattern(?!string)/;

匹配時,要考慮不符合

string

的才行,結果$&仍然只是取patern部分,不包括string

"?!",意思說目標串中不應該存在什麼

var str="ab1";

var reg=/ab(?!\d)/g

alert(reg.test(str));//結果為false

意思是目標串中的第三位不應該是數字。

python 部分少見正規表示式 用法

一直以為正規表示式用的不錯了 今晚仔細學習發現很多還不到位,之前忽略的一些用法 1.匹配括號中的任意正規表示式 2.注釋,忽略括號內的內容 3.表示式 之前的字串,在字串 liutest 中 test 會匹配 liu 4.後面不跟表示式 的字串,如果 liu 後面不是字串 test 那麼 test ...

正規表示式用法

正規表示式的概念 什麼是 什麼是正規表示式?是html的乙個變種。一般情況下,論壇不允許你使用 而只能用 替代 是一套由流行的 標籤組成了固定 有統一的格式。使用者只要遵循 規則就可以實現使用者想要的功能。如 想要顯示粗體的how are you 字樣,就應該輸入 how are you而不是輸入h...

正規表示式用法

乙個正規表示式就是由普通字元 例如字元 a 到 z 以及特殊字元 稱為元字元 組成的文字模式。該模式描述在查詢文字主體時待匹配的乙個或多個字串。正規表示式作為乙個模板,將某個字元模式與所搜尋的字串進行匹配。將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 後向引用 或乙個八進位制轉義符。例如,...