正則表達式貪婪模式與懶惰模式

?

正則表達式貪婪匹配模式,對于初學者,往往也很容易出錯。有時候需要匹配一個段代碼內容,發現匹配與想要不一致。發現原來,跟貪婪模式有關系。如下,我們看下例子:

什么是貪婪模式

字符串有: “<h3>abd</h3><h3>bcd</h3>”,我們想匹配<h3>…</h3>內容,正則表達式如下:

1、h3開頭與結尾,”<h3>待添加</h3>” <h3></h3>都作為普通字符

2、中間可以出現任意字符,個數可以是0個或者多個,正則表達式可以用:.* ,“.”代表任意字符,默認模式不匹配換行,”*” 重復前面字符0個或者多個。

3、最終我們考慮結果將是:”<h3>.*</h3>” ,也可以是:”<h3>.{0,}</h3>” {}代表,重復前面指定個數字符,以下用到是,正則表達式調試工具截圖,軟件可以看:正則表達式工具推薦(學習工具、測試工具)

?

2種結果都一樣,這是我們不希望得到的,我們希望從左邊開始,第一個出現</h3>,就開始匹配。以上這種模式,是貪婪模式,也是正則表達式默認以這個方法匹配。表示重復字符,操作符,默認都是貪婪模式,如:.*,.+,.{1,},.{0,} 都會匹配最大長度字符。正則表達式元字符,量詞默認首先最大匹配字符串,這些量詞有:+,*,?,{m,n} 。一開始匹配,就直接匹配到最長字符串。

什么是懶惰模式

既然上面幾種,表示字符重復個數,元字符默認都是貪婪模式。如果,我們需要最小長度匹配,也就是懶惰模式,怎么樣寫正則表達式呢?其實,正則表達式里面通用方法是,在表示重復字符元字符,后面加多一個”?”字符即可。上面正則表達式可以寫成:”<h3>.*?</h3>”,或者”<h3>.{0,}?</h3>” 都可以。

?

懶惰模式,就匹配到我們需要字符串了。

總結

正則表達式,表示字符串重復個數元字符,'?,+,*,{}' 默認都會選擇貪婪模式,會最大長度匹配字符串,而要切換到懶惰模式,就只是在該元字符,后面加多一個”?” 即可切換到非貪婪模式(懶惰模式)。

轉載于:https://www.cnblogs.com/Jian-Zhang/p/6126356.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371914.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371914.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stm32 薄膜鍵盤原理_市面上的筆記本鍵盤優缺點解析,看完秒懂

大家在選購電腦時&#xff0c;很多人的關注重點都是筆記本的配置好不好、外觀設計酷不酷和電池續航能力強不強&#xff0c;對電腦鍵盤往往不會太在意&#xff0c;其實一個好的電腦鍵盤也可以幫助你提高工作效率&#xff0c;特別對于小編這樣的文字工作者&#xff0c;如果鍵盤手…

計算機等級考試心得體會,計算機等級考試心得體會(2)

估計以后的考試也可能略有變化&#xff0c;即逐漸增加使用命令的條數。由于該內容變化小&#xff0c;考生應當練習到純熟的境地&#xff0c;在考試時用盡可能少的時間來做這部分內容&#xff0c;以使其他內容有更多的時間。六題能做出五題即可&#xff0c;有一題一時想不起&…

Web開發框架–第1部分:選項和標準

在我的公司&#xff0c;我們正在評估未來幾年將使用哪種Web開發框架。 自上次評估以來&#xff0c;我們一直在使用由Struts 2驅動的Java應用服務器作為MVC&#xff0c;將Tiles作為模板引擎&#xff0c;將jQuery用于Javascript awesomennes&#xff0c;將DWR用于AJAX調用&#x…

增加一個類的功能可以采用繼承或者代理模式或者裝飾者模式

增加一個類的功能有3種辦法&#xff1a; 1.繼承 2.代理模式 3.裝飾者模式轉載于:https://www.cnblogs.com/panxuejun/p/6127837.html

dell增強保護套裝還原失效_汕頭長安歐尚汽車音響改裝升級,還原真實音色

今天給大家分享的是汕頭車韻汽車音響改裝店開業以來&#xff0c;升級改裝的第113輛長安汽車。長安歐尚x7外觀設計十分出彩&#xff0c;整體造型動感十足&#xff0c;前臉采用六邊形大尺寸的前格柵&#xff0c;并加入了“云鷹之翼”的設計元素&#xff0c;造型十分具有攻擊性&am…

POJ 2386 Lake Counting

鏈接&#xff1a;http://poj.org/problem?id2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 24263 Accepted: 12246Description Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a…

計算機窗口顏色不能自定義,用RBG顏色設置自定義顏色

這個是Mac自帶的測色計快捷鍵shift command c即可復制RBG格式的顏色#DD0000 這個是csdn 的logo里的紅色我們得到的是十六位顏色代碼但是UIColor()只有這幾種初始化方式init(white: CGFloat, alpha: CGFloat)init(hue: CGFloat, saturation: CGFloat, brightness: CGFloat, al…

http協議和瀏覽器緩存問題

HTTP是超文本傳輸協議。 HTTP是一個應用層協議&#xff0c;由請求和響應構成&#xff0c;是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。 轉載于:https://www.cnblogs.com/hodgson/p/6128003.html

Spring3國際化和本地化

我最近想將Spring 3提供的國際化和本地化功能添加到我當前的項目之一中。 我瀏覽了Spring文檔&#xff0c;然后在Internet上搜索以找到一些資源。 但是我找不到能夠滿足客戶要求的資源。 大多數教程都像hello world應用程序&#xff0c;它提供了基本的理解。 即使是spring文檔&…

h3c交換機 查看二層交換機端口ip_【分享】項目中如何選到稱心如意的交換機?...

項目中如何選擇交換機&#xff1f;這七個步驟不能少如何選擇交換機&#xff1f;如何根據項目確定網絡結構&#xff1f;我們在做大部分項目都有這樣的疑問&#xff0c;交換機做為弱電中最常用的設備之一&#xff0c;關于他的使用與選擇&#xff0c;不得不知&#xff0c;本期我們…

SSH中一些典型的問題

struts2 1-1&#xff1a;為什么每次請求都要創建一個Action對象&#xff1f; 是出于對線程安全的考慮&#xff0c;每個request都不會相互影響 1-2&#xff1a;ModelDriven攔截器的配置中refreshModelBeforeResult解決了什么問題&#xff1f; 先把舊的model對象從ValueStack…

為什么計算機連接不上打印機,為什么電腦連接打印機后卻沒反應

2013-12-12我的筆記本怎么連接不了打印機 顯示是這樣的好&#xff1a;以下方法供您參考&#xff1a;看一下您的系統服務中這兩個(最上面 和最下面的是不是沒啟用)總之是您的局域網連接沒有連接上&#xff0c;要不在網上鄰居里您會看到其他的機器的&#xff0c;這是搜到的解決的…

JavaFX 2.0布局窗格– BorderPane

BorderPane非常適合開發更復雜的布局。 通常&#xff0c; BorderPane提供五個不同的區域&#xff1a;頂部&#xff0c;右側&#xff0c;底部&#xff0c;左側和中央。 您可以通過調用setTop/setBottom/set…方法將Node設置到每個區域。 這種方法使開發“類似于網站”的應用程序…

頁面排版簡單樣式

頁面排版簡單樣式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…

JavaWeb基礎(jsp初識)

jsp, java server page jsp頁面是在服務器上運行的一個頁面 動態網頁 與后臺有數據交互的頁面 與其他語言的區別: jsp 使用java語言進行開發, 安全性高, 適合大型項目, 企業級的文本應用分布式項目, 服務器集群, hadoop asp.net 使用c#, .Net平臺, 簡單易用, 因為不開源, 所以安…

nao機器人拆解_一些機器人硬件網站

以前收集過一些網站&#xff0c;偏機器人機械結構、硬件、參數(也有模擬或算法)。在 https://www.zhihu.com/question/19826366 也夾雜著一些網址&#xff0c;但是有些網址沒有深入的內容&#xff0c;排版也不好&#xff0c;所以 在這里編輯成一個列表&#xff0c;方便歸檔。歡…

心電圖是模擬計算機嗎,心電圖儀

心電圖儀是由威廉愛因托芬(W. Einthoven,1860-1927)發明的。 什么是心電圖儀(機)M311986 心電圖儀能將心臟活動時心肌激動產生的生物電信號(心電信號)自動記錄下來&#xff0c;為臨床診斷和科研常用的醫療電子儀器。國內一般按照記錄器輸出道數劃分為&#xff1a;單道、三道、六…

從Java 8啟動項目拼圖?

在馬克雷因霍爾德 &#xff08; Mark Reinhold &#xff09;在他的《 項目拼圖&#xff1a;火車晚點 》一文中提出“將項目拼圖推遲到Java 9的下一個發行版中”。 他解釋了這樣做的原因&#xff1a;“仍然存在一些重大的技術挑戰”&#xff0c;并且“沒有足夠的時間來進行廣泛的…

ChannelOption用到的socket的標準參數

ChannelOption.SO_BACKLOG, 1024 BACKLOG用于構造服務端套接字ServerSocket對象&#xff0c;標識當服務器請求處理線程全滿時&#xff0c;用于臨時存放已完成三次握手的請求的隊列的最大長度。如果未設置或所設置的值小于1&#xff0c;Java將使用默認值50。 ChannelOption.SO_K…

cbrt c語音_isgraph - [ C語言中文開發手冊 ] - 在線原生手冊 - php中文網

在頭文件中定義int isgraph(int ch);檢查給定字符是否具有圖形表示形式&#xff0c;即它是數字(0123456789)&#xff0c;大寫字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)&#xff0c;小寫字母(abcdefghijklmnopqrstuvwxyz)或標點符號(!"#$%&()*,-./:;<>?[\]^_{|}~)或特定…