1樓:之蘿蘿蔔
最基本的意思:小括號就是括號內看成一個整體 ,中括號就是匹配括號內的其中一個,大括號就是匹配幾次
但是括號裡變加上其他字元就有不同意思 詳細介紹 例如:
n是一個非負整數。匹配確定的n次。例如,“o”不能匹配“bob”中的“o”,但是能匹配“food”中的兩個o。
n是一個非負整數。至少匹配n次。例如,“o”不能匹配“bob”中的“o”,但能匹配“foooood”中的所有o。“o”等價於“o+”。“o”則等價於“o*”。
m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o”將匹配“fooooood”中的前三個o。
“o”等價於“o?”。請注意在逗號和兩個數之間不能有空格。
?當該字元緊跟在任何一個其他限制符(*,+,?,,,)後面時,匹配模式是非貪婪的。非貪婪模式盡
可能少的匹配所搜尋的字串,而預設的貪婪模式則儘可能多的匹配所搜尋的字串。例如,對於字串“oooo”,“o+?”將匹配單個“o”,而“o+”
將匹配所有“o”。
.匹配除“\n”之外的任何單個字元。要匹配包括“\n”在內的任何字元,請使用像“[.\n]”的模式。
(pattern)
匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的matches集合得到,在vbscript中使用submatches集合,在jscript中則使用$0…$9屬性。要匹配圓括號字元,請使用“\(”或“\)”。
(?:pattern)
匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行儲存供以後使用。這在使用或字元“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:
y|ies)”就是一個比“industry|industries”更簡略的表示式。
(?=pattern)
正向預查,在任何匹配pattern的字串開始處匹配查詢字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後
使用。例如,“windows(?=95|98|nt|2000)”能匹配“windows2000”中的“windows”,但不能匹配
“windows3.1”中的“windows”。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從
包含預查的字元之後開始。
(?!pattern)
負向預查,在任何不匹配pattern的字串開始處匹配查詢字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以
後使用。例如“windows(?!95|98|nt|2000)”能匹配“windows3.1”中的“windows”,但不能匹配
“windows2000”中的“windows”。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是
從包含預查的字元之後開始
x|y匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”則匹配“zood”或“food”。
[xyz]
字符集合。匹配所包含的任意一個字元。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]
負值字符集合。匹配未包含的任意字元。例如,“[^abc]”可以匹配“plain”中的“p”。
[a-z]
字元範圍。匹配指定範圍內的任意字元。例如,“[a-z]”可以匹配“a”到“z”範圍內的任意小寫字母字元。
[^a-z]
負值字元範圍。匹配任何不在指定範圍內的任意字元。例如,“[^a-z]”可以匹配任何不在“a”到“z”範圍內的任意字元。
2樓:_久違
'-'表示單獨一個'-'字元 沒有特殊含義
[-]表示一個包括'-'字元的集合 與'-'的意思相同
正規表示式裡面 .* 和 .*? 有什麼區別?
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**
正規表示式中的小括號和中括號,有什麼區別呢?
7樓:匿名使用者
最基本的意思:小括號就是
括號內看成一個整體 ,中括號就是匹配括號內的其中一個,大括號就是匹配幾次
但是括號裡變加上其他字元就有不同意思 詳細介紹 例如:
n是一個非負整數。匹配確定的n次。例如,“o”不能匹配“bob”中的“o”,但是能匹配“food”中的兩個o。
n是一個非負整數。至少匹配n次。例如,“o”不能匹配“bob”中的“o”,但能匹配“foooood”中的所有o。“o”等價於“o+”。“o”則等價於“o*”。
m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次。例如,“o”將匹配“fooooood”中的前三個o。
“o”等價於“o?”。請注意在逗號和兩個數之間不能有空格。
?當該字元緊跟在任何一個其他限制符(*,+,?,,,)後面時,匹配模式是非貪婪的。非貪婪模式盡
可能少的匹配所搜尋的字串,而預設的貪婪模式則儘可能多的匹配所搜尋的字串。例如,對於字串“oooo”,“o+?”將匹配單個“o”,而“o+”
將匹配所有“o”。
.匹配除“\n”之外的任何單個字元。要匹配包括“\n”在內的任何字元,請使用像“[.\n]”的模式。
(pattern)
匹配pattern並獲取這一匹配。所獲取的匹配可以從產生的matches集合得到,在vbscript中使用submatches集合,在jscript中則使用$0…$9屬性。要匹配圓括號字元,請使用“\(”或“\)”。
(?:pattern)
匹配pattern但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行儲存供以後使用。這在使用或字元“(|)”來組合一個模式的各個部分是很有用。例如“industr(?:
y|ies)”就是一個比“industry|industries”更簡略的表示式。
(?=pattern)
正向預查,在任何匹配pattern的字串開始處匹配查詢字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後
使用。例如,“windows(?=95|98|nt|2000)”能匹配“windows2000”中的“windows”,但不能匹配
“windows3.1”中的“windows”。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從
包含預查的字元之後開始。
(?!pattern)
負向預查,在任何不匹配pattern的字串開始處匹配查詢字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以
後使用。例如“windows(?!95|98|nt|2000)”能匹配“windows3.1”中的“windows”,但不能匹配
“windows2000”中的“windows”。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是
從包含預查的字元之後開始
x|y匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”則匹配“zood”或“food”。
[xyz]
字符集合。匹配所包含的任意一個字元。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]
負值字符集合。匹配未包含的任意字元。例如,“[^abc]”可以匹配“plain”中的“p”。
[a-z]
字元範圍。匹配指定範圍內的任意字元。例如,“[a-z]”可以匹配“a”到“z”範圍內的任意小寫字母字元。
[^a-z]
負值字元範圍。匹配任何不在指定範圍內的任意字元。例如,“[^a-z]”可以匹配任何不在“a”到“z”範圍內的任意字元。
lua正規表示式,LUA 正規表示式
lua中修飾符 和 都表示匹配前一字元0次或多次,但 進行的是最短匹配,類似傳統正則中的非貪婪匹配,而 則是最長匹配,即貪婪匹配 由於你正則中最後一個 d 後面沒有任何東西了,那這個 進行了最短匹配,即什麼都不匹配,所以沒有捕獲到1999,而加上 後,由於有了結尾標識位,就必須匹配1999才能使整個...
正規表示式裡面和有什麼區別
渠睿 是貪婪模式 是勉強模式 是侵佔模式 以下是我對這幾個模式的理解 假定要分析的字串是xfoo foo 模式.foo 貪婪模式 模式分為子模式p1 和子模式p2 foo 兩個部分.其中p1中的量詞匹配方式使用預設方式 貪婪型 匹配開始時,吃入所有字元xfoo 去匹配子模式p1。匹配成功,但這樣以來...
正規表示式ddsw0,正規表示式 d d s w 0 9 d d s w 這兩個的區別是什麼呢?
亂紅齋 一個匹配有符號數,另一個匹配有符號數或無符號數。正規表示式,又稱規則表示式,是電腦科學的一個概念,這個概念最初是由unix中的工具軟體普及開的。正則表通常被用來檢索 替換那些符合某個模式 規則 的文字。正則引擎主要分為dfa nfa兩大類。許多程式設計語言都支援利用正規表示式進行字串操作。在...