正 则 表 达 式 异 常 : 正 在 分 析 …… 过 多。 各位,怎么解决啊?

冰灵公主 2009-02-03 05:19:13
string regex = @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578]
)|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4
69])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\
s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([1
3579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((
0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((
0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9]
)|(2[0-8]))))))"; //日期部分
regex += @"(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$"; //时间部分
System.Text.RegularExpressions.RegexOptions options = ((System.Text.RegularExpressions.RegexOptions.IgnorePatternWhitespace | System.Text.RegularExpressions.RegexOptions.Multiline) | System.Text.RegularExpressions.RegexOptions.IgnoreCase);

System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex, options);

以上是我从网上找的正则表达式,一字不差不抄上了,但是运行时出异常

[color=#FF0000]正在分析 “@"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578]
)|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4
69])|(11))[\-\/\s]?((0?[1-9])|([1……” 过多


这是为什么啊???



...全文
1581 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰灵公主 2009-02-04
  • 打赏
  • 举报
回复
我是读取excel中的数据,其中有日期格式,但是像1999-1-1这样在excel中的数据,
C#读到后就变成1999-1-1 00:00:00
不知道为什么

这些数据是要入SQL数据库的,所以要验证一下日期
冰灵公主 2009-02-04
  • 打赏
  • 举报
回复
这个问题就过去了吧
我用的
try catch
+
Convert.ToDateTime

冰灵公主 2009-02-04
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 llsen 的回复:]
日期的话 用日期控件啊

这么长
身份证验证也要不了这么多啊
[/Quote]



我现在就是想验证日期,数据来源是excel文件
我还试过DateTime.TryParse DateTime.Parse Convert.ToDateTime

但是觉得效果不好啊,各位有什么好办法没?
llsen 2009-02-04
  • 打赏
  • 举报
回复
日期的话 用日期控件啊

这么长
身份证验证也要不了这么多啊
-过客- 2009-02-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 binglinggongzhu 的帖子:]
以上是我从网上找的正则表达式,一字不差不抄上了,但是运行时出异常 [/Quote]

呵呵,这个不用说也能一眼看出来,日期部分软回车的自动折都没去掉
楼主这个正则运行是没问题的,但是结果是错的,首先要把日期部分软回车的自动折行去掉,然后是时间部分,一看就是错的,小时有问题,像18:00:59这样的时间是通不过的
再有就是用了那么多的捕获组,浪费资源,拖慢速度

以前倒是整理过一个这样的正则表达式,日期部分格式为yyyy-MM-dd,或yyyy-M-d,其中的连接符可以为“-”、“/”、“.”,年份为1600-9999,带闰年判断

string pattern = @"^(?:(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))([-/.])(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})([-/.])(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))))(?:\s+(?:[01][0-9]|2[0-3]):[0-5]?[0-9]:[0-5]?[0-9])?$";
if (Regex.IsMatch(yourStr, pattern))
richTextBox2.Text = "符合";
else
richTextBox2.Text = "不符合";


不过这样的正则没有太大必要,这样的正则,能读懂的人并不多,实际应用的场景也不多
如果楼主用在程序里,就没必要用正则了,或是没必要如此用正则了,日历控件是一个很好的选择
止戈而立 2009-02-03
  • 打赏
  • 举报
回复
之前写过一个验证2008年的,楼主可参考一下:
2008-((0?[13578]|1[02])-(0?[1-9]|[12][0-9]|3[01])|(0?[469]|11)-(0?[1-9]|[12][0-9]|30)|0?2-(0?[1-9]|[12][0-9]))
至于判断是否闰年,没必要也放到正则里去,结合DateTime.IsLeapYear(int year)来做就行了。
止戈而立 2009-02-03
  • 打赏
  • 举报
回复
汗。。这个正则不存在语法错误,不存在什么过多的问题,但实在没看出为什么要写这么繁琐?
楼主想要对日期进行验证是吗?不至于要写成这个样子的。
niitnanfeng 2009-02-03
  • 打赏
  • 举报
回复
梅花雨什么的日历控件就可以了。
CutBug 2009-02-03
  • 打赏
  • 举报
回复
日期不用让客户输入吧,这么长,就算不报错,效率也够低的,最好找个日期控件吧
rl0516 2009-02-03
  • 打赏
  • 举报
回复
可能是括号多了个吧
冰灵公主 2009-02-03
  • 打赏
  • 举报
回复
[x-y]颠倒
冰灵公主 2009-02-03
  • 打赏
  • 举报
回复
没问题?难道是我输入有误?
我再看看啊
Fibona 2009-02-03
  • 打赏
  • 举报
回复
不知道你是报什么过多?

括号还是什么??
Fibona 2009-02-03
  • 打赏
  • 举报
回复
string regex = @"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578]
)|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4
69])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\
s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([1
3579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((
0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((
0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9]
)|(2[0-8]))))))";//this.txt_key.Text;
regex += @"(\s(((0?[0-9])|([1-2][0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$"; //时间部分

System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(regex, System.Text.RegularExpressions.RegexOptions.IgnoreCase
|System.Text.RegularExpressions.RegexOptions.Multiline);

我刚试了没有问题,
浮生若梦丶 2009-02-03
  • 打赏
  • 举报
回复
⊙﹏⊙b汗,是够多的,另外找个正则吧
wwwliujg 2009-02-03
  • 打赏
  • 举报
回复
过多
chen2319 2009-02-03
  • 打赏
  • 举报
回复
看的眼睛好花啊 友情帮顶
冰灵公主 2009-02-03
  • 打赏
  • 举报
回复
正在分析 “@"^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578]
)|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[4
69])|(11))[\-\/\s]?((0?[1-9])|([1……” 过多

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧