PERL:
排除环视
需求如下,有一字符串str,写正则表达式,必须满足如下条件:
1,不能为空字符串
2,必须是整数
3,不能以0开头
4,0-9中每个数字,只能出现一次。即0-9这十个数每个数只能出现一次,1265是可以的,1125667就不行了,1出现了2次,6也出现了两
次
看到别人给的答案:
^
(?!0) #排除环视,当开头字符不为0时匹配成功。
(?: #非捕获型括号,提高速度。
([0-9]) #0-9任意取一个数字,但开头的数字不能为0。
(?!.*?/1) #排除环视,意思是当?!后面的字符不出现时匹配成功。?!/1意思是当不出现/1即$1中的字符时匹配成功
#如果此处是(?!/1)可以保证不会出现两个连续的数字,但无法保证不会出现之前已经出现的数字。而(?!.*?/1)
#却能保证,不知道是如何做到的?
)+
$