正则表达式中的或意义和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则与或子式的顺序无关。以上两种顺序均可匹配成功,但是第二种效率稍高。