正規表示式裡面和有什麼區別

2021-08-13 07:23:58 字數 2578 閱讀 3731

1樓:渠睿

.* 是貪婪模式

.*? 是勉強模式

.*+ 是侵佔模式

以下是我對這幾個模式的理解:

假定要分析的字串是xfoo******foo

模式.*foo (貪婪模式):

模式分為子模式p1(.*)和子模式p2(foo)兩個部分. 其中p1中的量詞匹配方式使用預設方式(貪婪型)。

 匹配開始時,吃入所有字元xfoo******去匹配子模式p1。匹配成功,但這樣以來就沒有了字串去匹配子模式p2。本輪匹配失敗;第二輪:

減少p1部分的匹配量,吐出最後一個字元, 把字串分割成xfoo******fo和o兩個子字串s1和s2。 s1匹配p1, 但s2不匹配p2。本輪匹配失敗;第三輪,再次減少p1部分匹配量,吐出兩個字元, 字串被分割成xfoo******fo和oo兩部分。

結果同上。第四輪,再次減少p1匹配量, 字串分割成xfoo******和foo兩個部分, 這次s1/s2分別和p1/p2匹配。停止嘗試,返回匹配成功。

模式.*?foo (勉強模式):

最小匹配方式。第一次嘗試匹配, p1由於是0或任意次,因此被忽略,用字串去匹配p2,失敗;第二次,讀入第一個字元x, 嘗試和p1匹配, 匹配成功; 字串剩餘部分foo******foo中前三個字元和p2也是匹配的. 因此, 停止嘗試, 返回匹配成功。

在這種模式下,如果對剩餘字串繼續去尋找和模式相匹配的子字串,還會找到字串末尾的另一個xfoo,而在貪婪模式下,由於第一次匹配成功的子串就已經是所有字元,因此不存在第二個匹配子串。

模式.*+foo (侵佔模式):

也叫佔用模式。匹配開始時讀入所有字串, 和p1匹配成功, 但沒有剩餘字串去和p2匹配。因此, 匹配失敗。返回。

具體可以關注一下我的博文

2樓:只想0o悠閒

同問 .* 點心是嘛意思

正規表示式裡面 .* 和 .*? 有什麼區別?

3樓:

表示式 .* 就是單個字元匹配任意次,即貪婪匹配。

表示式 .*? 是滿足條件的情況只匹配一次,即最小匹配.

\s    匹配任何空白非列印字元,包括空格、製表符、換頁符等等。等價於 [ \f\n\r\t\v]。注意 unicode 正規表示式會匹配全形空格符。

\s    匹配任何非空白非列印字元。等價於 [^ \f\n\r\t\v]。

*限定符是貪婪的,因為它們會儘可能多的匹配文字,只有在它們的後面加上一個?就可以實現非貪婪或最小匹配。

比如:使用/<.*>/匹配的結果為:h1>chapter 1 - 介紹正規表示式使用/<.*?>/匹配結果為:h1。

拓展知識

正規表示式特殊字元及其含義

4樓:匿名使用者

\s匹配任意的空白符(包括空格,製表符(tab),換行符,中文全形空格)

\s則是任意不是空白符的字元

?涉及到貪婪模式

當正規表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配儘可能多的字元。以這個表示式為例:a.

*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。

有時,我們更需要懶惰匹配,也就是匹配儘可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上一個問號?。這樣.

*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:

a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)

5樓:匿名使用者

\w 等價於 [a-za-z0-9_]

\w 等價於 [^a-za-z0-9_],就是排除了\w的情況,也就是說它們表示的意思相反

6樓:匿名使用者

簡單的說就是,用一小段簡單的各種字元的組合,即叫做 正規表示式,去實現複雜的:

字串匹配,查詢你到你所需要的內容,以便後期提取出來你所要的內容。

這個聽起來很簡單,但是很多現實的應用中,所要處理的字串有千千萬萬種,各種複雜的字元,而且每個人的需求有無窮盡種,需要提取出的內容也是無窮多。而如果手動處理,寫普通的if else語句去一點點判斷字串是否相等,則是無法實現的。

而用正則,就可以實現如此多的,繁雜的,極度複雜的,各種需求。

更多的內容,可以看看我所總結的:

正規表示式學習心得

再舉幾個實際的例子:

notepad++正規表示式替換舉例1:一次性替換多個檔案的字尾

notepad++正規表示式替換舉例2:一次性替換多個路徑

notepad++正規表示式替換舉例3:一次性替換多個listitem為sect4

notepad++正規表示式替換舉例4:給每一行都新增addicon的字首

notepad++正規表示式替換舉例5:給book的標題和地址新增html**

正規表示式中和有什麼區別,正規表示式裡面 和 有什麼區別?

最基本的意思 小括號就是括號內看成一個整體 中括號就是匹配括號內的其中一個,大括號就是匹配幾次 但是括號裡變加上其他字元就有不同意思 詳細介紹 例如 n是一個非負整數。匹配確定的n次。例如,o 不能匹配 bob 中的 o 但是能匹配 food 中的兩個o。n是一個非負整數。至少匹配n次。例如,o 不...

求正規表示式分割aa ee得到,求正規表示式 分割 aa bb cc dd ee 得到 aa , bb , cc , dd , ee

str.match w g str.match w u4e00 u9fa5 g 支援中文 aa bb 標準的表示 包含aa,且包含bb 的模式,對aa和bb的出現順序無要求,但這是偵測,不能 獲,要想捕獲內容,就需要把邊界定義清楚。在你沒有說清楚的時候,暫以 包含aa和bb的一行文字 為捕獲內容來理...

正規表示式中代表什麼正規表示式中的或是什麼意思?

點代表的是任意字元。代表的是取 0 至 無限長度 問號代表的是非貪婪模式。三個連結在一起是取儘量少的任意字元,一般不會這麼單獨寫。他大多用在 a 就是取前面任意長度的字元,到底一個 a 出現,匹配如下q wer qwerqweraljlkjlkjlkj,得到 q wer qwerqwera 這部分,...