這次帶給大家正規匹配IP的圖文詳解,正規符合IP的注意事項有哪些,下面就是實戰案例,一起來看一下。
這裡給大家詳細講解一下一個符合IP位址的正規表示式,
有關正則方面的知識,會在詳細的講解中提到。
在講解之前,我先跟大家介紹一下,ip位址的生成規則。
IP位址,是由32位元數字二進位轉為四個十進位的字串組成。
怎麼轉化?以下說明:
二進位:11111111111111111111111111111111
11111111111111111111
1111111111111111111
11 轉換:2^7+2^6+2^5+2^4+ 2^3+2^2+2^1+2^0=255
轉為十進位範圍:0~255.0~255.0~255.0~255
## # 這是位址的範圍。 依照這個產生IP的規則和範圍,我們可以用正規表示式來配對出IP位址,但要怎麼符合呢?各人有各人的方法,這裡我講解一下我的思路。 依照IP位址的字串規律,我把符合IP位址的運算式分成兩個部分來考慮。 第一部分:符合30~255.(注意後面的一點) 第二部分:配對最後的數字0~255 先匹配出0~255.(注意後面的點) 這個字串,然後重複匹配3次,然後再匹配最後的數字部分0~255。這就是我匹配IP位址的思路。首先,我要提一下,正規是沒有辦法做數字運算的,所以,我們無法用數字運算的方式篩選出IP的數字範圍。既然沒法用數字運算的方式篩選出IP的數字範圍,那麼我們該用什麼其他方式來篩選這個數字範圍呢?我的想法是分組
討論,然後再把這些分組合併起來組成IP的數字範圍。 ①、假設IP的數字是百位數,那麼依照IP的數位範圍,我們可以得到以下幾種情況。假設第一個數字為1,那麼這個數字的範圍就為1[0-9][0-9]。這個應該不難理解,就不解釋。 ②、假設第一個數字為2,那麼依照IP數字的範圍規則,這裡又要分成兩種情況,為什麼?你想想,最大數字是255,當十位數為5時,個位數最大隻能為5是吧?而當十位數為0到4時,個位數可以是任意數字對吧? 所以,這裡的兩種情況分別是: A、2[0-4][0-9] A、2[0-4][0-9]## ③、分析完了百位數的情況,接下來就是十位數的情況了,假如是十位數,那麼十位數的前面第一個數不能為零是吧?
所以十位數的情況可以是:[1-9][0-9]
④、剩下的就是個位數的情況了,個位數的情況,大家應該很容易下結論,就是:[0-9]。
四種情況分析下來,我們得到了IP數字的範圍分組為:
1[0-9][0-9]# ## 1[0-9][0-9]# -2 4][0-9]
25[0-5]
9][0-
# 怎麼把上面的分組用正規表示式表示出來呢?很簡單,用正規的或符號|和分組符號()就可以了,所以上面的分組正規表示式為:(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])|([1-9][0-9])|([0-9])
寫到這裡,數字的匹配範圍正則表達式已經寫好了,那麼根據我前面的思路: 第一部分:匹配3個0~255.(注意後面的一個點)
第二部分:搭配最後的數字0~255
我們來符合IP位址的第一部分,正規表示式如下:
(1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9]\.)
我在每個數字的後面加了一個點就是配對出0~255.(注意後面的一點)
那麼要先重複配對三次呢?很簡單,我們只要把這五個分組當成整體,再重複匹配三次就行了,正則表達式如下:
((1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9])\.)){3}
第一部分已經匹配出來了,接下來就是拼接上第二部分的數字了,數字部分上面已經寫得很清楚了,就不再解釋了,下面是完整的正則表達式:
((1[0-9][0-9]\.)|(2[0-4][0-9]\.)|(25[0-5]\.)|([1-9][0-9]\.)|([0-9]\.)){3}((1[0-9][0-9])|(2[0-4][0-9])|(25[0-5])|([1-9][0-9])|([0-9]))
寫到這裡,正則匹配IP的表達式已經出來了,不過,這並不是最終的匹配IP的正規表示式,為什麼呢?很簡單,正規表示式會對每一個分組都進行捕獲匹配,上面把匹配IP分成了那麼多分組,而每一個分組的內容都會被正則所捕獲,那上面不知道已經捕獲多少IP了,呵呵,那要怎麼去掉分組的內容呢?很簡單,用這個符號?:
?:符號放在()圓括號裡面,是捕獲分組,但不捕獲正則表達式的內容的意思。那麼,我們把它放到每一個分組裡面去,不就去掉了分組的內容了嗎?所以,我們還要給每個分組加上?:,加上後正則如下:
(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))
即使到這裡,還是沒有把IP地址匹配出來,我們還要用^和$來限製字符串的開頭與結尾,所以,最後的符合IP位址的正規表示式是:
^(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$
這就是我符合IP位址最完整的正規表示式,大家可以參考一下,有什麼bug也望讀者提出,免得誤導其他讀者。
上面的正規表示式的()括號都是成對出現的,假如有不成對出現,請讀者自己加一下,可能是我漏寫了。
以下是我的測試:
<?php $pattern = '/^(?:(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:1[0-9][0-9]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:2[0-5][0-5])|(?:25[0-5])|(?:1[0-9][0-9])|(?:[1-9][0-9])|(?:[0-9]))$/'; //正则匹配ip地址 $ip = '254.21.0.198'; preg_match($pattern,$ip,$out); echo '<pre class="brush:php;toolbar:false">'; print_r($out); $ip = '255.777.0.198'; preg_match($pattern,$ip,$out); print_r($out); $ip = '07.25.8.198'; preg_match($pattern,$ip,$out); print_r($out); $ip = '1207.25.8.198'; preg_match($pattern,$ip,$out); print_r($out); $ip = 'qq107.25.8.198'; preg_match($pattern,$ip,$out); print_r($out); $ip = '\.\.\.107.25.8.198'; preg_match($pattern,$ip,$out); print_r($out); $ip = '\.\.\. 7.25.8.198'; preg_match($pattern,$ip,$out); print_r($out); $ip = '107.25.8.19822vvv'; preg_match($pattern,$ip,$out); print_r($out); $ip = '107.25.r8.1982'; preg_match($pattern,$ip,$out); print_r($out); $ip = '107.225.8.19'; preg_match($pattern,$ip,$out); print_r($out); $ip = '225.225.225.225'; preg_match($pattern,$ip,$out); print_r($out); $ip = '0.0.0.0'; preg_match($pattern,$ip,$out); print_r($out); $ip = '00.0.0.0'; preg_match($pattern,$ip,$out); print_r($out); $ip = '0.202.1.0'; preg_match($pattern,$ip,$out); print_r($out); $ip = '0.202.1.226'; preg_match($pattern,$ip,$out); print_r($out); $ip = '249.202.1.0'; preg_match($pattern,$ip,$out); print_r($out); $s=''; for($i=0;$i<p>相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章! </p><p>推薦閱讀:</p><p><a href="http://www.php.cn/js-tutorial-390765.html" target="_blank">js裡的正規實作數字每隔四位元用空格分隔效果</a><br></p><p><a href="http://www.php.cn/js-tutorial-390754.html" target="_blank">在PHP裡使用正規的效率貪婪、非貪婪與回溯詳解(附程式碼)</a><br></p>
以上是正規匹配IP的圖文詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

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

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器