我已经尝试弄清楚如何使正则表达式匹配特定的内容,然后是日期和时间。我这辈子都想不通!
我想匹配以下句子,当然日期和时间可能是随机的:
书房 25/01/2013 吉隆坡。14.03 skrev
所以它应该像这样匹配: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.00到23.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`
捕获值以便于验证。
也许不是最聪明的解决方案,但这个表达式应该符合您的要求:
密度\s[0-3][0-9]/[0-1][[0-9]/[0-9][0-9][0-9][0-9]\skl.\ s[0-2][0-9].[0-6][0-9]\sskrev
原来我真正需要的是:
(Den ../../.. kl. .. skrev)
自从 。只匹配随机字符,并且由于这句话是由电子邮件客户端自动生成的,因此无需实际验证它是否是日期,而只需查找此模式并丢弃之后的所有内容。没有人会在常规文本的中间写得如此特别。
如果有人想知道,这是用于 SpiceWorks 回复标头过滤的。