首页 新闻 会员 周边

请问各位大虾这句正则表达式的意思是什么?

0
悬赏园豆:5 [已解决问题] 解决于 2009-11-18 12:46

/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/

boboisboy的主页 boboisboy | 菜鸟二级 | 园豆:346
提问于:2009-11-14 16:48
< >
分享
最佳答案
0

1. “^" 标识行开头 “$”标识行结尾

    \d 等价 [0-9], {1-4}表示至少出现一次至多出现4次的匹配。

    (-|\/) 注意这里的字符"-"并非元字符,在这里“-”就是表示转折符号,同样“\/”是对方斜杠符号"/"的转义。

   这个表达式最关键的也最难以理解的地方可能是使用到“反向引用”,也就是“\2“的使用,简单的给楼主解释下吧。反向引用是按照从左到右遇见的左括号字符的顺序进行创建和编号的,例如该表达式中按照()被分成4个组,被分别编号为1-4个组,那么\2这里实质上是反向引用(-|\/)了这个组。你可以简单的理解成“\2”替换成(-|\/)即可。

  结合上述解释比较清楚了: 这个正则的目的就是用来匹配“日期”的,例如"2009-11-14"或者"09/11/14"的,呵呵。但是这个正则又有其不足之处,太过于宽泛了,例如:2009-99-99也是符合要求的,显然是不正确的,楼主可以学习后自行修改满足实际的需求即可。

 

2.看楼主的正则写法,理应出自火热的javascript,你需要了解 javascript 的 regex 对象,需要了解正则的基本知识,这样你就可以扩展这个示例来满足你真是环境下的需求。给你一个30分钟学会正则的教程地址:http://unibetter.com/deerchao/zhengzhe-biaodashi-jiaocheng-se.htm

3.在2中给出的学习地址中,有一个老外基于C#的正则类编写的小工具,检验你编写的正则是否满足自己的意图和需求,很可惜该工具在输入中文时全部乱码,谁叫是老外编写的呢?不过基于javascript在线类似工具很多,google一下吧,顺便可以学习学习。

4.处理文本是正则的强项,他们就是为文本处理而生的,所以有必要学习,如果需要系统学习正则表达式,首推一本奇书:《精通正则表达式X》,无论哪个版本都可,不过网络中多是英文版的CHM或者PDF,不熟悉正则的话,看起来可能有点吃力。

5.有了方向,以后就多google吧,答案无处不在,呵呵。

收获园豆:5
rainnoless | 小虾三级 |园豆:613 | 2009-11-14 18:44
谢谢,受教了
boboisboy | 园豆:346 (菜鸟二级) | 2009-11-18 12:46
其他回答(1)
0

rainnoless

回答的很仔细了,我跟个贴

persialee | 园豆:3217 (老鸟四级) | 2009-11-14 20:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册