当前位置: 代码迷 >> ASP.NET >> 正则(?exp)的作用,该如何解决
  详细解决方案

正则(?exp)的作用,该如何解决

热度:5434   发布时间:2013-02-25 00:00:00.0
正则(?:exp)的作用
(?:exp)这样匹配表达式exp表示什么意思?

------解决方案--------------------------------------------------------
哈,讲原理的,我来说一下吧

(?:exp) 非捕获组,匹配exp的内容,但不捕获到组里

至于作用,一般来说是为了节省资源,提高效率

比如说验证输入是否为整数,可以这样写
^([1-9][0-9]*|0)$
这时候我们需要用到()来限制“|”表示“或”关系的范围,但我们只是要判断规则,没必要把exp匹配的内容保存到组里,这时就可以用非捕获组了
^(?:[1-9][0-9]*|0)$

以上只是一个简单的例子,或许会觉得无所谓,但是如下的日期正则,如果全都用捕获组,那就是对资源的极大浪费了

^(?:(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})([-/.])(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))))$
  相关解决方案