首頁 web前端 js教程 正規表示式教學之前後再查找lookaround詳解_正規表示式

正規表示式教學之前後再查找lookaround詳解_正規表示式

Jun 28, 2017 pm 01:47 PM
尋找 表達式

這篇文章主要介紹了正規表示式教程之前後查找lookaround,結合具體問題分析了向前查找及向後查找功能的實現技巧與注意事項,需要的朋友可以參考下

本文實例講述了正規表示式教學之前後查找lookaround。分享給大家供大家參考,具體如下:

註:在所有例子中正規表示式匹配結果包含在源文本中的之間,有的例子會使用Java來實現,如果是java本身正規表示式的用法,會在對應的地方說明。所有java例子都在JDK1.6.0_13下測試通過。

一、問題引入

在HTML頁面中,符合一對標籤之間的文本,如同符合頁面的標籤,即< title>與之間的文字:

文字:welcome to my page

#正規表示式:<[Tt][Ii][Tt][Ll][Ee]>.*?

結果:welcome to my page

分析:<[Tt][Ii][Tt][Ll][Ee]>表示不區分大小寫,這個模式匹配到了title標籤以及它們之間的文本,但是並不完美,因為我們只想要title標籤之間的文本,而不包括標籤本身。解決這個問題我們就需要用到前後查找(lookaround)。

二、向前尋找

向前尋找指定了一個必須符合但不在結果中傳回的模式。向前查找其實就是一個子表達式,它以?=開頭,需要匹配的文字跟在=的後面。

看一個符合出一個URL位址中協定部分的範例:

文字:http://blog.csdn.net/mhmyqn

正規表示式:.+(?=:)

結果:【http】://blog.csdn.net/mhmyqn

分析:URL位址中協議部分是在:之前的部分,模式.+匹配任意文本,子表達式(?=:)匹配:,但是被匹配到的:並沒有出現在結果中。我們使用?=向正規表示式引擎表明,只要找到:就行了,但不包括在最終的返回結果裡。這裡如果不使用向前匹配(?=:),而是直接使用(:),那麼匹配結果就會是http:了,它包括了:,並不是我們想要的。

注意:前後查找中的前、後是指模式與被查找文本的相對位置而言的,左為前,右為後。即向前查找為:xxx(?=xxx),而向後查找為(?<=xxx)xxx,向後查找在接下來會介紹到。

三、向後找出

向後找出運算子是?<=。但是並不是所有的正規表示式實作都支援向後查找,JavaScript就不支持,java語言支援向後查找。

例如要找出文字當中的價格(以$開頭,後面跟著數字),結果不包含貨幣符號:

文字:category1:$136.25,category2:$28,category3: $88.60

正規表示式:(?<=\$)\d+(\.\d+)?

結果:category1: $【136.25】,category2:$【28】,category3:$【88.60】

#分析:(?< ;=\$)模式符合$,\d+(\.\d+)?模式符合整數或小數。從結果可以看出,結果不包括貨幣符號,只匹配出了價格。如果不使用向後查找,情況會是什麼樣子呢?使用模式$\d+(\.\d+)?,這樣會把$包含在結果中。使用模式\d+(\.\d+)?,又會把categery1(23)中的數字也配對出來,都不是我們想要的。

注意:向前尋找模式的長度是可變的,它們可以包含.、*、+之類的元字元;而向後尋找模式只能是固定長度,不能包含. 、*、+之類的元字元。

四、把向前查找和向後查找結合起來

#把向前查找和向後查找結合起來使用,即可解決前面HTML標籤之間的文字的問題:

文字:welcome to my page

正規表示式:(?<=<[Tt][Ii][Tt][Ll][Ee]>).*?(?=)

結果:<span style="color: #ff6600">【welcome to my page】</span></title> ;</head></span></p> <p>分析:從結果可以看出,問題完美的解決了。 (?<=<[Tt][Ii][Tt][Ll][Ee]>)是向後操作,它符合<title>但不消費它,(?=</[Tt ][Ii][Tt][Ll][Ee]>)是一個向前操作,它匹配但不消費它。最終傳回的符合結果只包含了標籤之間的文字了。

五、對前後查找取非

前面說到的向前查找和向後查找通常都是用來匹配文本,其目的是為了確定將被傳回的符合結果的文字的位置(透過指定比對結果的前後必須是哪些文字)。這種用法叫正向前查找和正向後查找。還有一種負向前查找和負向後查找,是查找那些不與給定模式相符的文字。

前後尋找的運算子:

(?=) #正向前尋找
(?!) 負向前找到
(?<=) 正向後找出
(? 為負向後找出

##例如一段文字中即有價格(以$開頭,後面跟數字)和數量,我們要找出價格和數量,先來看找價格:

文字:I paid $30 for 10 apples , 15 oranges, and 10 pears. I saved $5 onthis order.正規表示式:

(?<=\$)\d+

結果:

I paid

【$30】 for 10 apples, 15 oranges, and 10 pears. I saved 【$5】

on thisorder.

#找出數量:文字:

I paid $30 for 10 apples, 15 oranges, and 10 pears. I saved $5 onthis order.

正規表示式:

\b(?#結果:

I paid $30 for

【10】

apples,

【15】 oranges, and 【10】pears. I saved $5 on this order.

分析:(?< ;!\$)表示一個負向後查找,它使得結果只包含那些不以$開頭的數值。
六、小結

有了前後查找,就可以對最終的匹配結果包含哪些內容做出精確的控制。前後查找操作使我們可以利用子表達式來指定文字匹配操作發生的位置,並收到只匹配不消費的效果。
PS:這裡再提供大家2款非常方便的正規表示式工具供大家參考使用:

############## #JavaScript正規表示式線上測試工具:#########http://tools.jb51.net/regex/javascript############正規表示式線上產生工具: #########http://tools.jb51.net/regex/create_reg####

以上是正規表示式教學之前後再查找lookaround詳解_正規表示式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何關閉'尋找我的 iPhone” 如何關閉'尋找我的 iPhone” Nov 09, 2023 pm 02:21 PM

關閉iPhone版「查找」後會發生什麼事? 「尋找我的iPhone」可協助您定位遺失或被竊的裝置。啟用後,「尋找我的iPhone」可讓您在地圖上追蹤裝置的位置、播放聲音並協助您找回裝置。 「查找」還包括一個啟動鎖,可防止任何人使用您的iPhone。當您關閉「尋找我的iPhone」時,您將失去所有這些功能,這可能會使恢復遺失的Apple裝置變得困難。雖然「尋找我的iPhone」非常有用,但當您想出售、捐贈、以舊換新手機或想要將其送去更換電池或任何其他服務時,您應該停用它。這樣做將確保沒有人可以訪問有關您

使用C#中的Array.IndexOf函數來找出陣列中某個元素的索引 使用C#中的Array.IndexOf函數來找出陣列中某個元素的索引 Nov 18, 2023 am 09:59 AM

使用C#中的Array.IndexOf函數來找出陣列中某個元素的索引在C#程式中,當我們需要尋找陣列中某個元素的索引時,可以使用Array.IndexOf函數。 Array.IndexOf函數會在指定的陣列範圍內尋找指定的元素,並傳回其第一次出現的索引。如果未找到該元素,則傳回-1。下面是一段範例程式碼,示範如何使用Array.IndexOf函數來找出陣列中某個元

在 iPhone 上關閉「尋找」的 4 種方法 在 iPhone 上關閉「尋找」的 4 種方法 Feb 02, 2024 pm 04:15 PM

Apple的「尋找」應用程式可讓您定位您的iPhone或其他設備,以防止遺失或遺忘。雖然「查找」是一個有用的工具來追蹤設備,但如果您關注隱私問題、不想耗盡電池或其他原因,您可能想要停用它。幸運的是,有幾種方法可以關閉iPhone上的“查找”,我們將在這篇文章中解釋所有這些方法。如何在iPhone上關閉「尋找」[4種方法]您可以透過四種方式關閉iPhone的「查找」。如果您使用方法1關閉“查找”,則可以從要停用它的裝置上執行此操作。若要繼續執行方法2、3和4,要關閉「尋找」的iPhone應關閉電源或

硬碟序號和mac位址怎麼查 硬碟序號和mac位址怎麼查 Feb 18, 2024 pm 07:45 PM

硬碟序號和MAC位址是電腦硬體中重要的標識符,它們在管理和維護電腦系統時非常有用。本文將介紹如何尋找硬碟序號和MAC位址。一、尋找硬碟序號硬碟序號是硬碟製造商為了辨識和追蹤硬碟的唯一識別碼。在不同的作業系統中,尋找硬碟序號的方法略有不同。 Windows系統:開啟命令提示字元(在開始功能表中搜尋「cmd」),然後輸入以下命令並按下回車鍵:wmicdisk

PHP中的glob()函數用來尋找檔案或目錄 PHP中的glob()函數用來尋找檔案或目錄 Nov 18, 2023 pm 06:17 PM

PHP中的glob()函數用來尋找檔案或目錄,是一種強大的檔案操作函數。它可以根據指定的模式匹配,返回檔案或目錄的路徑。 glob()函數的語法如下:glob(pattern,flags)其中,pattern表示要匹配的模式字串,可以是一個通配符表達式,如*.txt(匹配以.txt結尾的文件),或者是具體的文件路徑。 flags是一個可選參數,用來控制函數

在C++中,尋找未排序數組中元素的起始索引和結束索引 在C++中,尋找未排序數組中元素的起始索引和結束索引 Aug 29, 2023 am 10:17 AM

在這個問題中,我們得到一個包含n個未排序整數值的陣列aar[]和一個整數val。我們的任務是在未排序的陣列中尋找元素的開始和結束索引。對於數組中元素的出現,我們將返回,“起始索引和結束索引”(如果在數組中找到兩次或多次)。 「單一索引」(如果找到)如果數組中不存在,則「元素不存在」。讓我們舉個例子來理解問題,例1Input:arr[]={2,1,5,4,6,2,3},val=2Output:startingindex=0,endingindex=5解釋元素2出現兩次,第一次出現在索引=0處,第二

如何找到電腦硬碟的序號 如何找到電腦硬碟的序號 Feb 20, 2024 am 10:33 AM

電腦硬碟序號怎麼查隨著電腦科技的發展,電腦硬碟已經成為我們生活中不可或缺的一部分。無論是儲存重要的文件,還是安裝作業系統和軟體,都需要依靠硬碟來完成。而了解電腦硬碟的一些基本訊息,例如硬碟的序號,可以幫助我們更好地管理和維護電腦系統。那麼,電腦硬碟序號怎麼查呢?本文將介紹幾種常見的方法。方法一:使用Windows系統自帶的命令列工具Windows系統

如何用Python寫哈希查找演算法? 如何用Python寫哈希查找演算法? Sep 21, 2023 pm 02:37 PM

如何用Python寫哈希查找演算法?哈希查找演算法,又稱為雜湊查找演算法,是一種基於哈希表的資料查找方法。相較於線性查找和二分查找等傳統查找演算法,哈希查找演算法具有更高的查找效率。在Python中,我們可以使用字典(dictionary)來實作雜湊表,進而實作雜湊查找。哈希查找演算法的基本想法是將待查找的關鍵字透過雜湊函數轉換成索引值,然後根據索引值在雜湊表中查

See all articles