作者:万源佳威5 | 来源:互联网 | 2023-09-02 23:42
如题,我看到一个答案(?!.*?(\d).*?\1.*?$)\d+,试了试,正确。哪位大神可以给讲解一下呢?
14 个解决方案
?! epr是断言后面不是epr,而epr是.*?(\d).*?\1.*?$,这句话就是查找重复的串
(\d).*?是一个数字串,\1.*?是再跟任意个数字串,\1的意思是引用前面的匹配组,从0开始,但是\0是引用整个串本身。
至于为什么要用*?你可以自己在好好琢磨下。
前面为什么加个.*?,我在琢磨下,也坐等其他人回答。
主要牵涉到正则的回溯过程的细节。
不建议深究。正则太复杂了非常难理解和维护的。
这里是判断yyyy-mm-dd这种格式的,基本上把闰年和2月等的情况都考虑进去了,我记得是远古之前在本论坛看见的。
^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$
你难道也想要人解释?
正则表达式速查 正则表达式举例 正则表达式学习 (4页A4纸)
http://download.csdn.net/detail/zhao4zhong1/1808549
http://download.csdn.net/detail/xuzhouweihao/7407835
30min让你学会正则表达式,很好的一个教材。
http://blog.csdn.net/taodm/article/details/28680243
好吧,我在博客里专门解释了一下。
正则表达式不是万能的;
有限状态自动机才是万能的。
\1.*?, 前面的\1好理解,是引用第一个分组,表示出现了两个相同的字符串,后面的.*?是指匹配任意字符的惰性模式,对于本表达式,这样做可以减少错误匹配回溯的次数,加快匹配效率