成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

?*或+正則表達式使用詳解

開發 后端
?*或+正則表達式使用詳解主要向你介紹了在實現重復的時候,我們使用?*或+的情況,那么希望對于這樣具體的?*或+正則表達式使用詳解對你有所幫助。

?*或+正則表達式使用詳解是向你介紹我們使用?*或+實現“重復”的操作,那么具體的有哪些方面呢?我們下面通過實例的講解形式向你逐一介紹,希望對你有所幫助。

?*或+正則表達式使用詳解之相關概念:

?:告訴引擎匹配前導字符0次或一次。事實上是表示前導字符是可選的。

+:告訴引擎匹配前導字符1次或多次

*:告訴引擎匹配前導字符0次或多次

<[A-Za-z][A-Za-z0-9]*>匹配沒有屬性的HTML標簽,“<”以及“>”是文字符號。第一個字符集匹配一個字母,第二個字符集匹配一個字母或數字。

我們似乎也可以用<[A-Za-z0-9]+>。但是它會匹配<1>。但是這個正則表達式在你知道你要搜索的字符串不包含類似的無效標簽時還是足夠有效的。

◆?*或+正則表達式使用詳解之限制性重復

許多現代的正則表達式實現,都允許你定義對一個字符重復多少次。詞法是:{min,max}。min和max都是非負整數。如果逗號有而max被忽略了,則max沒有限制。如果逗號和max都被忽略了,則重復min次。

因此{0,}和*一樣,{1,}和+ 的作用一樣。

你可以用<<\b[1-9][0-9]{3}\b>>匹配1000~9999之間的數字(“\b”表示單詞邊界)。<<\b[1-9][0-9]{2,4}\b>>匹配一個在100~99999之間的數字。

◆?*或+正則表達式使用詳解之注意貪婪性

假設你想用一個正則表達式匹配一個HTML標簽。你知道輸入將會是一個有效的HTML文件,因此正則表達式不需要排除那些無效的標簽。所以如果是在兩個尖括號之間的內容,就應該是一個HTML標簽。

許多正則表達式的新手會首先想到用正則表達式<< <.+> >>,他們會很驚訝的發現,對于測試字符串,“This is a <EM>first</EM> test”,你可能期望會返回<EM>,然后繼續進行匹配的時候,返回</EM>。

但事實是不會。正則表達式將會匹配“<EM>first</EM>”。很顯然這不是我們想要的結果。原因在于“+”是貪婪的。也就是說,“+”會導致正則表達式引擎試圖盡可能的重復前導字符。只有當這種重復會引起整個正則表達式匹配失敗的情況下,引擎會進行回溯。也就是說,它會放棄最后一次的“重復”,然后處理正則表達式余下的部分。和“+”類似,“?*”的重復也是貪婪的。

◆?*或+正則表達式使用詳解之深入正則表達式引擎內部

讓我們來看看正則引擎如何匹配前面的例子。第一個記號是“<”,這是一個文字符號。第二個符號是“.”,匹配了字符“E”,然后“+”一直可以匹配其余的字符,直到一行的結束。然后到了換行符,匹配失敗(“.”不匹配換行符)。于是引擎開始對下一個正則表達式符號進行匹配。也即試圖匹配“>”。到目前為止,“<.+”已經匹配了“<EM>first</EM> test”。引擎會試圖將“>”與換行符進行匹配,結果失敗了。于是引擎進行回溯。結果是現在“<.+”匹配“<EM>first</EM> tes”。于是引擎將“>”與“t”進行匹配。顯然還是會失敗。這個過程繼續,直到“<.+”匹配“<EM>first</EM”,“>”與“>”匹配。于是引擎找到了一個匹配“<EM>first</EM>”。記住,正則導向的引擎是“急切的”,所以它會急著報告它找到的第一個匹配。而不是繼續回溯,即使可能會有更好的匹配,例如“<EM>”。所以我們可以看到,由于“+”的貪婪性,使得正則表達式引擎返回了一個最左邊的最長的匹配。

◆?*或+正則表達式使用詳解之用懶惰性取代貪婪性

一個用于修正以上問題的可能方案是用“+”的惰性代替貪婪性。你可以在“+”后面緊跟一個問號“?”來達到這一點。“*”,“{}”和“?”表示的重復也可以用這個方案。因此在上面的例子中我們可以使用“<.+?>”。讓我們再來看看正則表達式引擎的處理過程。

再一次,正則表達式記號“<”會匹配字符串的第一個“<”。下一個正則記號是“.”。這次是一個懶惰的“+”來重復上一個字符。這告訴正則引擎,盡可能少的重復上一個字符。因此引擎匹配“.”和字符“E”,然后用“>”匹配“M”,結果失敗了。引擎會進行回溯,和上一個例子不同,因為是惰性重復,所以引擎是擴展惰性重復而不是減少,于是“<.+”現在被擴展為“<EM”。引擎繼續匹配下一個記號“>”。這次得到了一個成功匹配。引擎于是報告“<EM>”是一個成功的匹配。整個過程大致如此。

◆?*或+正則表達式使用詳解之惰性擴展的一個替代方案

我們還有一個更好的替代方案。可以用一個貪婪重復與一個取反字符集:“<[^>]+>”。之所以說這是一個更好的方案在于使用惰性重復時,引擎會在找到一個成功匹配前對每一個字符進行回溯。而使用取反字符集則不需要進行回溯。

最后要記住的是,本教程僅僅談到的是正則導向的引擎。文本導向的引擎是不回溯的。但是同時他們也不支持惰性重復操作。

?*或+正則表達式使用詳解的基本內容就向你介紹到這里,希望對你學習?*或+正則表達式使用詳解有所幫助。

【編輯推薦】

  1. 正則表達式匹配數字實例解析
  2. 正則表達式匹配字符串實現詳解
  3. 正則表達式入門必學的星星點點
  4. 正則表達式引擎淺析
  5. 正則表達式字符集探究
責任編輯:仲衡 來源: IT168
相關推薦

2009-09-16 18:19:34

正則表達式組

2009-08-03 17:27:14

C#正則表達式

2024-10-17 17:03:43

SQL正則表達式MySQL

2009-09-16 16:22:04

正則表達式匹配

2010-03-25 18:25:36

Python正則表達式

2011-08-16 17:28:49

iPhone SDK正則表達式

2011-08-23 17:46:09

LUA正則表達式模式

2009-09-16 14:32:43

PHP正則表達式替換

2023-10-07 08:25:09

Java處理工具正則表達式

2020-09-04 09:16:04

Python正則表達式虛擬機

2018-09-27 15:25:08

正則表達式前端

2024-09-14 09:18:14

Python正則表達式

2009-08-20 16:23:32

C#正則表達式語法

2010-07-14 09:47:04

Perl正則表達式

2009-09-16 14:22:44

preg_match正

2019-07-25 17:00:44

Python正則表達式字符串

2017-05-12 10:47:45

Linux正則表達式程序基礎

2022-03-28 06:19:14

正則表達式開發

2009-02-18 09:48:20

正則表達式Java教程

2019-07-17 15:45:47

正則表達式字符串前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线www | 玖玖免费 | 91精品国产高清一区二区三区 | 黄色精品| 91香蕉嫩草 | 国产精品视频一区二区三区 | 国产中文在线观看 | 天天操天天操 | av在线播放免费 | 精品在线播放 | 蜜桃av鲁一鲁一鲁一鲁 | 91国内精精品久久久久久婷婷 | 精品91久久 | 久久综合av| 在线看亚洲| 成人精品影院 | 夜夜爽夜夜操 | 成人午夜激情 | 国产成人短视频在线观看 | 亚洲乱码国产乱码精品精的特点 | 伊人在线 | 一本色道精品久久一区二区三区 | 永久网站 | 国产精品久久久久久久久久久久 | 欧美在线视频免费 | 日韩av在线一区 | 成人免费大片黄在线播放 | 亚洲一区二区三区四区视频 | 欧美三级在线 | 久久日本 | 国产精品美女久久久久久免费 | 先锋av资源在线 | 一本色道久久综合亚洲精品高清 | 青青草免费在线视频 | 亚洲成人观看 | 一区免费观看 | 91久久久久| 亚洲小视频在线观看 | 偷拍自拍网址 | www.天天干.com | 亚洲网站在线观看 |