正則表達式中的或|和C++中的邏輯或||


  正則表達式中的或意義和C++中的||意義相同,均表示滿足其中一個條件即可。如下式表示匹配一個個位數或者小於255的三位數。

[0-9]|(25[0-5])|(2[0-4][0-9])

  但是在有些測試正則表達式的軟件中,正則表達式的或的用法類似於C++的邏輯或||,當滿足某個條件后則不計算之后的其他條件。測試用例如下:

//正則表達式,表示匹配IPv4格式的字符串
(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])
//測試用例:
172.16.254.1
//測試結果:不匹配

  而如果調換匹配0-255數字的或子式的順序則匹配成功。

//正則表達式,表示匹配IPv4格式的字符串
(((1[0-9]{2})|(25[0-5])|(2[0-4][0-9])|([1-9][0-9])|[0-9])\.){3}((1[0-9]{2})|(25[0-5])|(2[0-4][0-9])|([1-9][0-9])|[0-9])
//測試用例:
172.16.254.1
//測試結果:匹配

  但是根據測試C++中的正則表達式regex類中的regex_match則與或子式的順序無關。以上兩種順序均可匹配成功,但是第二種效率稍高。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM