【问题标题】:Regex for date/year format yyyy+ or yyyy-日期/年份格式 yyyy+ 或 yyyy- 的正则表达式
【发布时间】:2018-11-14 15:03:39
【问题描述】:

我正在尝试为 yyyy+ 创建正则表达式,这意味着每年都有一个大于 yyyy 年的正匹配。 例如。文本是 2017+,它必须匹配 2017、2018、2019 ...,但不会匹配 2016。 我对该主题进行了研究,但几乎所有结果都是 yyyy 格式的。 为了给出上下文,数据以字符串的形式存储在 mongodb 数据库中,格式为 yyyy+、yyyy- 或 yyyy,我将使用正则表达式查询文档。

另外,另一个问题是这可能在正则表达式中吗?

【问题讨论】:

  • 您可能可以使用正则表达式来做到这一点,但这并不是它们的真正用途。只需捕获年份,然后使用您使用的任何一种编程语言将其与目标年份进行比较。
  • ^^ 这个。为什么不直接捕获数字 (\d+),然后检查它是否是 >,或 >=,或 ==,或 <=,或 <,您希望与之比较的值。试图在一个正则表达式中执行整个比较是问题的严重过度复杂化。可能,但几乎可以肯定不是最好的方法。

标签: regex


【解决方案1】:

尽管此类任务不应该只由正则表达式完成,而是应该使用您选择的编程语言使用算术比较来完成。但只是为了学术目的,你可以写一个像这样的正则表达式,虽然还有其他几种方法可以做到这一点,但我这样做是消极的。您可以尝试使用交替形成等于或大于 2017 或小于 2017 的各种数字情况来执行此操作。如您的帖子中所述,我专门为 2017+ 编写了此正则表达式。此正则表达式匹配等于或大于 2017 的四位数字(您的帖子中提到的 yyyy)。

^(?![10]\d{3})(?!2(?=01[0-6]))(?!2(?=00\d))\d{4}$

说明:

  • ^ --> 字符串开始
  • (?![10]\d{3}) --> 否定前瞻,确保数字不是以零或一开头后跟三位数字的形式
  • (?!2(?=01[0-6])) --> 否定前瞻,确保数字以 2 开头,那么它后面不应跟着 010 到 016
  • (?!2(?=00\d)) --> 负向向前看,确保数字以 2 开头,那么它后面不应该跟着 000 到 009
  • \d{4} --> 精确匹配四位数字,确保匹配 yyyy 日期模式
  • $ --> 字符串结束

Demo Here

如果这是您想要的,请告诉我。否则,请提供更多输入输出示例,以便我可以更好地为您提供更合适的答案。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多