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

 

posted @ 2021-11-06 12:29  放不下的小女孩  阅读(833)  评论(0编辑  收藏  举报