搜尋
首頁JavaJava基礎java使用正規表示式來匹配不包含某個規則的字串

java使用正規表示式來匹配不包含某個規則的字串

Nov 19, 2019 pm 04:16 PM
java字串正規表示式規則

java使用正規表示式來匹配不包含某個規則的字串

測試資料:

java使用正規表示式來匹配不包含某個規則的字串

例如上面這幾個簡單的日誌條目,我們想實現兩個目標:

1、把8號的資料過濾掉;

2、把那些不包含robots.txt字串的條目給找出來(只要Url包含robots.txt的都給過濾掉)。

前瞻的語法是:

(?!匹配模式)

我們先來實現第一個目標-符合不以特定字串開頭的條目。

這裡我們因為要排除一段連續的字串,因此符合模式非常簡單,就是2009-07-08。實作如下:

^(?!2009-07-08).*?$

用Expresso我們可以看到結果確實過濾掉8號的資料。

接下來,我們來實現第二個目標-排除包含特定字串的條目。

按照我們上面寫法,我照葫蘆畫瓢了一下:

^.*?(?!robots\.txt).*?$

這段正則用大白話描述就是:開頭任意字符,然後後面不要跟著robots.txt連續字符串,然後再跟著任意個字符,字串結尾。

執行測試,結果發現:

java使用正規表示式來匹配不包含某個規則的字串

沒有達到我們想要的效果。這是為什麼呢?我們為上面的正規表示式加上兩個捕獲分組調試:

^(.*?)(?!robots\.txt)(.*?)$

測試結果:

java使用正規表示式來匹配不包含某個規則的字串

我們看到,第一個分組啥都沒有匹配到,而第二個分組卻匹配了整個字串。再回過頭來好好分析剛才那個正規表示式。

實際上,當正規引擎解析到A區 域的時候,就已經開始執行B區域的前瞻工作。這個時候發現當A區域為Null的時候匹配成功——.*本來就允許匹配空字符,前瞻條件又滿足,A區域後面緊 跟著的是“2009”字符串,而並不是robots。因此整個匹配過程成功地匹配到所有條目。

java使用正規表示式來匹配不包含某個規則的字串

分析出原因之後我們對上述的正規進行修正,將.*?移入前瞻表達式,如下:

^(?!.*?robots).*$

測試結果:

java使用正規表示式來匹配不包含某個規則的字串

推薦教學:java開發入門

#

以上是java使用正規表示式來匹配不包含某個規則的字串的詳細內容。更多資訊請關注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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器