【发布时间】:2017-02-08 12:00:57
【问题描述】:
我在日期时间上有一个小问题
2014 年 4 月 15 日
我写了这个正则表达式:\D+[a-z] \d{2}, \d{1,4}
问题是当我有日期之前的文本时,例如:
文字文字 2014 年 4 月 15 日文字
好吧,在这种情况下,我的正则表达式还选择了文本,而不仅仅是日期。所以我需要稍微修改一下我的正则表达式来严格查找我的日期,而不是之前或之后的文本。
谁能帮帮我?
【问题讨论】:
我在日期时间上有一个小问题
2014 年 4 月 15 日
我写了这个正则表达式:\D+[a-z] \d{2}, \d{1,4}
问题是当我有日期之前的文本时,例如:
文字文字 2014 年 4 月 15 日文字
好吧,在这种情况下,我的正则表达式还选择了文本,而不仅仅是日期。所以我需要稍微修改一下我的正则表达式来严格查找我的日期,而不是之前或之后的文本。
谁能帮帮我?
【问题讨论】:
只需使用[a-zA-Z]+ 来匹配月份名称:
[a-zA-Z]+ \d{2}, \d{1,4}
另外,如果您需要在更大的字符串中匹配这些字符串,请考虑使用字边界\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 可能是这样的:
aprila lot of space15 space,space2014
那么这个正则表达式是不安全的:[a-zA-Z]+ \d{2}, \d{1,4} 它可以随心所欲地匹配,但 安全吗? 不,因为 single space 违反了规则。 p>
这是一个安全的正则表达式:\w+\s+\d+,\s+\d+
您仍然可以通过包围^ 和$ 使其更安全,对您来说最安全的正则表达式是:^\w+\s+\d+,\s+\d+$
【讨论】: