正則表達式中的或意義和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則與或子式的順序無關。以上兩種順序均可匹配成功,但是第二種效率稍高。
