Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么iso8601的此正则表达式在使用Z后缀指定的UTC时间内失败?_C#_Regex - Fatal编程技术网

C# 为什么iso8601的此正则表达式在使用Z后缀指定的UTC时间内失败?

C# 为什么iso8601的此正则表达式在使用Z后缀指定的UTC时间内失败?,c#,regex,C#,Regex,这是正则表达式: ^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$ 问题是这个正则表达式不匹配带有Z后缀的字符串。UTC偏移量指定为+0或-0的字符串可以正常工作,但Z不能。正则表达式有什么问题,如何更

这是正则表达式:

^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$
问题是这个正则表达式不匹配带有Z后缀的字符串。UTC偏移量指定为+0或-0的字符串可以正常工作,但Z不能。正则表达式有什么问题,如何更正

"2012-06-21T19:32:26.2311892-04:00"  // is a match
"2012-06-21T19:32:26.2311892-00:00"  // is a match
"2012-06-21T19:32:26.2311892+00:00"  // is a match

"2012-06-21T19:32:26.2311892Z" // not a match

表达式中有一个
\.
,它应该是
\.
。更正后,带有
Z
后缀的示例输入成功匹配。

什么是.NET版本? 如果我在VisualStudio2012(.NET4.5、4.0、2.0)中进行测试,一切正常

Regex rx = new Regex("^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[0-1]|0[1-9]|[1-2][0-9])T(2[0-3]|[0-1][0-9]):([0-5][0-9]):([0-5][0-9])(\\.[0-9]+)?(Z|[+-](?:2[0-3]|[0-1][0-9]):[0-5][0-9])?$");
string[] times = new[] {
    "2012-06-21T19:32:26.2311892-04:00",
    "2012-06-21T19:32:26.2311892-00:00",
    "2012-06-21T19:32:26.2311892+00:00",
    "2012-06-21T19:32:26.2311892Z" };
foreach (string time in times)
    Console.WriteLine("{0} - {1}", time, rx.IsMatch(time));
输出:

2012-06-21T19:32:26.2311892-04:00 - True
2012-06-21T19:32:26.2311892-00:00 - True
2012-06-21T19:32:26.2311892+00:00 - True
2012-06-21T19:32:26.2311892Z - True

你可以检查这个正则表达式,我刚检查过,效果很好

\d{4}-[0-1]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-6]\d{1,}.\d{1,}([+|-]\d{2}:\d{2}|Z)

(Z++-]应该是([Z+-]@SaddamAbuGhaida不,不应该。你说匹配的字符串实际上不匹配,因为你有
\.
而不是
\.
。这是因为你是从一个C非逐字字符串文本中复制的吗?除此之外,
Z
的版本对我来说是匹配的。字符串的小数部分不匹配。请尝试正则表达式t例如,您可以实时看到有多少数据被匹配。我将其作为问题的注释,而不是答案,因为如果OP使用的是C#非逐字字符串文字(问题标记为C#),双反斜杠是正确的。事实上,我们可以合理地假设它可能无意中显示了转义字符串。:)我用\替换了\\,现在可以正常工作了。问题是我测试正则表达式的方法。我需要在代码中使用双反斜杠,因为正则表达式放在json模式中。但是,RegexPlanet.com不需要双反斜杠。根据恢复的健全性,
\d
应该避免在用于json模式的正则表达式中使用SON Schema@280Z28是的,但问题是解析普通正则表达式,他没有提到任何关于JSON解析的内容。因为日期可以用JSON字符串标记,然后转换为日期对象,所以我没有投你的反对票,只是因为OP提供了更多信息。是的,我知道。但我添加它只是为了分享信息:).NET4.5VS2013。问题在于,对于JSON模式项目,正则表达式被存储为JSON中的字符串。