正則表示式的懶惰和貪婪模式
當正則表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配儘可能多的字元。以這個表示式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。
有時,我們更需要懶惰匹配,也就是匹配儘可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味著匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。現在看看懶惰版的例子吧:
a.*?b匹配最短的,以a開始,以b結束的字串。如果把它應用於aabab的話,它會匹配aab(第一到第三個字元)和ab(第四到第五個字元)。
相關推薦
正則表示式中的貪婪模式和懶惰模式
1,需求:從這段字串的匹配出<h3></h3>中的內容 <h3>abd</h3><h3>bcd</h3><h3>dfsd</h3> 我們可以寫這兩種正則表示式來實現 1,<h3>.{0,}<
正則表示式的懶惰和貪婪模式
當正則表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配儘可能多的字元。以這個表示式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。 有時,我們更需要懶惰匹配,也就是匹配儘可
JAVA 正則表示式的三種模式: 貪婪, 勉強和佔有的討論
模式.*foo (貪婪模式): 模式分為子模式p1(.*)和子模式p2(foo)兩個部分. 其中p1中的量詞匹配方式使用預設方式(貪婪型)。 匹配開始時,吃入所有字元xfooxxxxxx去匹配子模式p1。匹配成功,但這樣以來就沒有了字串去匹配子模式p2。本輪匹配失敗;第二輪:減少p1部分的匹配量
正則表示式懶惰模式(.*? .+?)
?表示懶惰模式。必須跟在*或者+後邊用。 當正則表示式中包含能接受重複的限定符時,通常的行為是(在使整個表示式能得到匹配的前提下)匹配儘可能多的字元。以這個表示式為例:a.*b,它將會匹配最長的以a開始,以b結束的字串。如果用它來搜尋aabab的話,它會匹配整個字串aabab。這被稱為貪婪匹配。
關於正則表示式數量詞的貪婪與非貪婪模式
在匹配正則的時候或許會遇到返回的結果多幾個字元或者少幾個字元,什麼原因呢,這個就是正則的貪婪與非貪婪模式,假設,我的匹配字元是: a = 'asdf444adfadf adfsadf' 正則表示式的貪婪模式: [a-z]{2,6} 列印結果 ['asdf',
Python正則表示式中的貪心模式和非貪心模式
宣告:最近發現有人利用我在百度雲盤裡免費分享的127課Python視訊盈利,並聲稱獲得我的授權。
正則表示式match和group的區別 具有相同模式的字串使用組的提取案例及原理
一、案例: Match類 示例:查找出字串中包含的url string text = "FirstUrl: http://www.sohu.com ,SecondUrl: http://www.baidu.com "; string pattern = @"\b(\
正則表示式 - - Pattern 和 Matcher 類 (三)
一、Pattern類 Pattern類中有兩個最常用的方法: (1)boolean isMatch = Pattern.matches("regExp", "string"); matches()方法表示正則表示式regExp是否匹配字串string,匹配返回true,不匹配返回false
正則表示式規則和舉例
正則物件: 可以用在大多數高階語言中。 作用: 1) 用於字串的查詢(找檔名,在檔案內部找內容) 2) 判斷字串與正則表示式是否匹配,用於表單驗證。 以下是個人在工作和學習中總結的一些規則,供
正則表示式r和re
# coding:utf-8 import re print 'a\ws' print r'a\nb' # r'': 一般用在正則表示式中,稱為原始字串,作用是將Python語法中的反斜槓轉義給 取消,將其設定成為一個普通的字串。可以解決Python中的轉義字元和正則表示式
Java正則表示式pattern和matches
package com.lks.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @author lks * @time 2016年6月6日下午11:02
正則表示式中的貪婪匹配——python學習筆記
貪婪匹配 1.1 概念 正則匹配預設是貪婪匹配,也就是匹配儘可能多的字元。舉例如下,匹配出數字後面的0;以下例子是用python寫的,但是貪婪匹配的概念在其他語言中是一致的。 import re result = re.match(r'^(\d+)(0*)$', '102300
Regular Expression Matching 正則表示式匹配和遞迴
class Solution {public: bool isMatch(const char *s, const char *p) { if (*p == 0) return *s == 0; if (*(p+1) != '*') {
正則表示式匹配和替換
轉自 : 正則表示式非常有用,查詢、匹配、處理字串、替換和轉換字串,輸入輸出等。而且各種語言都支援,例如.NET正則庫,JDK正則包, Perl, JavaScript等各種指令碼語言都支援正則表示式。下面整理一些常用的正則表示式。 字元 描述 \ 將
萬用字元和正則表示式聯絡和區別
以前總是把萬用字元和正則表示式的標誌搞混。最近沒用,又忘記做筆記了。看到一個同學的說說想起自己對於這塊也不熟悉。因此週末特意來補一篇部落格。為自己以後方便,也為大家早點福利。 以下基本出自百度百科,維基百科及網上資料。我負責收集一下。求不吐槽原創
在vs2013中使用正則表示式查詢和替換文字內容
我們有的時候需要替換程式碼中的某些內容,因為替換的內容“不一致”,所以不能簡單的使用一個replace搞定。這裡有幾個解決方法,核心思想是一致的,程式設計師不要做體力活,能交給程式或指令碼的就交給程式或指令碼來完成。 我先提一個替換的需求,這
Python常用正則表示式語法和寫法
今天因為看一個爬蟲的例子,看到資料抓取的時候別人用的正則表示式去匹配想要的資料.當即對這個表示式感興趣起來,仔細閱讀了一下相關文件,對其有了大概的認識,索性寫了一篇文章來介紹python中相關正則表示式的用法,以便自己日後參閱! 相關介紹 正則表示式是一
java 中用正則表示式匹配和提取字串
java.util.regex類支援用正則表示式來匹配和提取字串,讀者可以去官網檢視java.util.regex的詳細使用方法。首先給出一個匹配字串的例子(判斷line是否符合格式"GraphType\\s*=\\s*\".+\"\\s*"):public static b
python 正則表示式 groups和group有什麼區別
p = re.compile(r'[ ]+(\w+)+[ ]+\1') 單個字元不需要[],可以簡化為 p = re.compile(r' +(\w+)+ +\1') (\w+)+這種寫法效率很低,而且容易引起誤會。表面上它匹配的是任意多個word(1個或更多),其實整體匹配的內容和一個word沒區別,只是
正則表示式match和findall的區別
在python中match和findall兩個方法都可用於尋找字串中匹配的字串。其中match方法根據正則模式,從源字元的第一個字元開始匹配,如果尋找到了相應匹配模式,則返回相應結果,例如: import re s='abcd'; p = re.compile('abcd