正则表达式:日期完全匹配

Regex: Date Exact Match

我在日期时间上遇到了一点问题

2014 年 4 月 15 日

我写了这个正则表达式:\D+[a-z] \d{2}, \d{1,4}

问题是当我在日期之前有文本时,例如:

text text 2014 年 4 月 15 日 text

好吧,在这种情况下,我的正则表达式还选择了文本,而不仅仅是日期。所以我需要稍微修改我的正则表达式以严格查找我的日期,而不是之前或之后的文本。

谁能帮帮我?

只需使用[a-zA-Z]+来匹配月份名称:

[a-zA-Z]+ \d{2}, \d{1,4}

regex demo

此外,如果您需要在更大的字符串中匹配这些字符串,请考虑使用单词边界,\b[a-zA-Z]+ \d{2}, \d{1,4}\b,或者如果您需要 完整字符串,请考虑使用锚点匹配:^[a-zA-Z]+ \d{2}, \d{1,4}$.

请注意:\d{1,4} 匹配 1 到 4 位数字。如果您打算匹配 4 位数年份,请使用 \d{4}。如果您打算匹配 2 位或 4 位数字年份,请使用 (\d{4}|\d{2}),但这次您确实需要单词边界或锚点。

对于你的情况,你应该小心,因为你的 date 可能是这样的:
四月a lot of space15space,space2014
那么这个正则表达式是不安全的:
[a-zA-Z]+ \d{2}, \d{1,4} 它匹配你想要的但是 safety? 不,因为 single space 违反了那个规则。

这是一个安全的正则表达式:
\w+\s+\d+,\s+\d+

你仍然可以通过包围 ^$ 使它更安全,对你来说最安全的正则表达式是:
^\w+\s+\d+,\s+\d+$

prove