我是一名正念新手,似乎无法想出这个。
以下是指向所需字符串格式的链接:
http://earth.gov.bc.ca/royp-bin/phcgi.exe?PH_QKC=DOCUWI&PH_APP=RMSprodApp&PH_HTML=DOCUWI.htm
例如:
100041506421W500 = 1 + 0 + {01-16} + {01-36} + {001-129} + {01-36} + W + {1-6} +0 + {0-9}
我试过了:
^10[0|2-9]{1}0*([1-9]|1[0-6])0*([1-9]|[12][0-9]|3[0-6])0*([1-9][0-9]|1[0-2][0-9])0*([1-9]|[12][0-9]|3[0-6])W[1-6]0[0-9]$
在正则表达式验证器中,除了1041506421W500和10000000041506421W500验证之外,它还有效。整个字符串只能是16个字符。
我很确定我遗漏了一些关于前导零的明显内容。尝试了NTS格式并遇到了同样的问题。
答案 0 :(得分:1)
好的我觉得我根据你的规范把它弄清楚了:
1+0+{01-16}+{01-36}+{001-129}+{01-36}+W+{1-6}+0+{0-9}
这里扩展了一些评论:
^
1
0
[0|2-9] // match 0 or 2-9 (is this missing from your spec?)
(0[1-9]|1[0-6]) // match 01-09 or 10-16
(0[1-9]|[12][0-9]|3[0-6]) // match 01-09 or 10-29 or 30-36
(00[1-9]|0[1-9][0-9]|1[0-2][0-9]) // match 001-009 or 010-099 or 100-129
(0[1-9]|[12][0-9]|3[0-6]) // match 01-09 or 10-29 or 30-36
W
[1-6]
0
[0-9]
$
这里全部放在一起:
^10[0|2-9](0[1-9]|1[0-6])(0[1-9]|[12][0-9]|3[0-6])(00[1-9]|0[1-9][0-9]|1[0-2][0-9])(0[1-9]|[12][0-9]|3[0-6])W[1-6]0[0-9]$
答案 1 :(得分:0)
例如:
100041506421W500 = 1+0+{01-16}+{01-36}+{001-129}+{01-36}+W+{1-6}+0+{0-9}
这已经错了,因为100041506421W500
是1 + 0 + 00
像0*([1-9]|[12][0-9]|3[0-6])
之类的东西也是错误的,导致允许变量长度并且你有固定长度的部分。
主要问题是regexp本身。您最好只使用substr
和to_i
。
答案 2 :(得分:0)
你的意思是明显的问题是量词*
。这意味着0或更多。
如果您希望这些零是可选的,请使用?
作为量词,表示0或1.表示将0*
更改为0?
。
量词{1}
是多余的,你可以删除它。