Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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
Regex 正则表达式匹配特定句子加上日期和时间_Regex_Date_Sentence - Fatal编程技术网

Regex 正则表达式匹配特定句子加上日期和时间

Regex 正则表达式匹配特定句子加上日期和时间,regex,date,sentence,Regex,Date,Sentence,我试着弄明白如何让正则表达式匹配一些特定的东西,然后是日期和时间。我一辈子都想不出来 我想匹配以下句子,其中日期和时间当然可能是随机的: 荷兰2013年1月25日。14.03瑞典克朗 所以它应该这样匹配:Den dd/mm/yyyy kl。hh.mm skrev 请注意,时间是24小时格式的 有人能帮忙吗?我可以很容易地找到一个匹配日期或时间的示例,但我不知道如何将其与以下特定句子结合起来:( 提前感谢只需将它们组合为: Den (0[1-9]|[12][0-9]|3[01])/(0[1-9]|

我试着弄明白如何让正则表达式匹配一些特定的东西,然后是日期和时间。我一辈子都想不出来

我想匹配以下句子,其中日期和时间当然可能是随机的:

荷兰2013年1月25日。14.03瑞典克朗

所以它应该这样匹配:Den dd/mm/yyyy kl。hh.mm skrev

请注意,时间是24小时格式的

有人能帮忙吗?我可以很容易地找到一个匹配日期或时间的示例,但我不知道如何将其与以下特定句子结合起来:(


提前感谢

只需将它们组合为:

Den (0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/(0{3}[1-9]|((?!0{3}\d)\d{4})) kl\. ([01][0-9]|[2[0-3])\.([0-5][0-9]) skrev
注意:日期未正确验证。将与2000年2月30日匹配

Den
这样匹配
Den

(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{3}[1-9]
匹配日期。
0{3}[1-9]|((?!0{3}\d)\d{4})
避免0000作为年份

kl\.
匹配
kl.
之前的
\
是转义
,这是一个特殊字符 正则表达式

([01][0-9]|[2[0-3])\。([0-5][0-9])
匹配时间从00.0023.59

skrev
匹配
skrev

以下内容可以更好地验证日期

Den ((0[1-9]|[12][0-9]|3[01])/(?=(0[13578]|1[02]))(0[13578]|1[02])|(0[1-9]|[12][0-9]|30)/(?=(0[469]|11))(0[469]|11)|(0[1-9]|[12][0-9])/(?=(02))(02))/(0{3}[1-9]|((?!0{3}\d)\d{4})) kl\. ([01][0-9]|[2[0-3])\.([0-5][0-9]) skrev
仍然匹配1999年2月29日-没有闰年验证

要匹配个位数的天数和月份,请将日期部分替换为以下内容:

(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[0-2])/(0{3}[1-9]|((?!0{3}\d)\d{4}))
使前面的部分成为可选的,即
0
成为可选的

`Den ([0-3]\d)/([0-1]\d)/(\d{4}) kl\. ([0-2]\d)\.([0-5]\d) skrev`

捕获值以便于验证。

可能不是最聪明的解决方案,但此表达式应符合您的要求:


Den\s[0-3][0-9]/[0-1][[0-9]/[0-9][0-9][0-9]\skl.\s[0-2][0-9][0-6][0-9]\sskrev

结果证明我真正需要的是:

(荷兰……/。/…吉隆坡……瑞典)

既然只是匹配随机字符,因为这个句子是由一个电子邮件客户端自动生成的,不需要实际验证它是否是一个日期,而是只需寻找这个模式,然后丢弃所有的东西。没有人会在正则文本中间特别地写这个。


如果有人想知道,这是用于SpiceWorks回复标题过滤的。

Naveeds编辑的答案比我的答案好得多,它更接近于完全验证。例如,我的正则表达式将允许29个小时。我根本无法用它来验证任何内容……难道我不能在我的原始帖子中输入完整的句子示例吗例如,我会在regexpal.com中被抓到吗?对不起,使用了错误的验证器:),但Nava似乎走上了正确的轨道。无论如何,谢谢。尽管如此,如果我输入句子“Den 12/4/2012 kl.14:41 skrev”,我无法让它进行验证例如,我不关心闰年或0000、2月等。它只是捕捉生成的日期,而不是验证日期或其他任何东西。它是捕捉电子邮件中的回复标题。@nickdnk我认为“Den 12/4/2012 kl.14:41 skrev”是无效的输入,不是吗?哦,对不起。它确实有效。可能其他网站刚刚坏了。答案被接受。它确实需要能够匹配个位数的月份!