7到13位的,开头和结尾为数字,中间为数字和"-",但是"-"最多出现一次,请问这个正则表达式怎么写呀?

7到13位,开头和结尾为数字,中间为数字和"-",但是"-"最多出现一次,请问这个正则表达式怎么写?

阅读 10.6k
2 个回答
/^(?=[\d-]{7,13}$)\d+-?\d+$/

没办法写. 但可以把长度7-13单独判断.

pat = /^\d+-?\d+$/
if pat =~ str && str.length >=7 && str.length <=13
    do_something
end

错误声明

看了下面 @楼教主 的回答, 验证了一下, 是可行的. 关于没办法写实在打脸.

这让我对?<=?=重新查阅大量资料, 深入理解了一下. 虽然之前也是知道?=的, 但从没想过, 其真正的内涵, 只是停留在windows(?=xp|nt). 认为, 其放置在匹配的最后来限制必须有xpnt.

已点赞, 非常受教.

说明如下:

(?=[\d-]{7,13}), 这里的?=翻译很多, 我理解为, 它是对右侧字串的约束, 此处的意思是右侧字串是由数字和-构成, 长度为7-13位. 它只是预搜索一下, 并不影响右侧字串的匹配, 也不捕获任何匹配.

从位置来讲, ?=可以放置在正则表达式的开头, 中间, 尾部. 但核心是, 它约束其右侧的匹配. 而?<=则约束其左侧的匹配.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进