【问题标题】:Creating a regular expression for this type of dates为此类日期创建正则表达式
【发布时间】:2016-09-23 11:47:11
【问题描述】:

首先感谢您抽出宝贵时间阅读我的问题。

我正在尝试编写一个正则表达式来检测不同格式的日期,我发现了很多与此相关的问题,但没有一个符合我的要求。

以下是我需要检测的一些示例

16 SEPTEMBER 2016 
October 2016
8/2016
11/03/2016

这是我开始的一段代码,我有点卡住了,不知道如何从这里继续。 我想要做的基本上是每个 / 有多个选项,例如月份可以是单词或数字,年份可以是 93 或 1993

这是我的代码

(\d\d)+]?.?(\d\d)?\w{3,9}?.(\d\d\d\d)?|(\d\d)?

非常感谢您提前回复!

【问题讨论】:

  • 我不明白。你能告诉我们各种字符串的例子吗?在 javascript 中测试,对于 php 相同:'16 SEPTEMBER 2016 October 2016 8/2016 11/03/2016'.match(/([0-9]+) ([a-zA-Z]+) ([0 -9]+) ([a-zA-Z]+) ([0-9]+) ([0-9]+)\/([0-9]+) ([0-9]+)\ /([0-9]+)\/([0-9]+)/)
  • regex101.com/r/kU2xB5/1。它可能匹配的日期格式比你需要的多:)

标签: php regex date


【解决方案1】:

我不熟悉 PHP,但是由于 PHP 使用 Perl 正则表达式函数作为扩展,这里有一个 Perl 程序,它从数组中打印出日期:

#!/usr/bin/perl

@array = ('16 SEPTEMBER 2016', 'October 2016', '8/2016', '18/2016', '11/03/2016', 'NOT A DATE 3534');

for $date (@array){
    if($date =~ /^(\d{1,2} [A-Za-z]+ \d{4}$)|(^[A-Za-z]+ \d{4}$)|(^\d{1,2}\/\d{4}$)|(^\d{2}\/d{2}\/\d{4}$)/){
        print "$date\n";
    }
}

如果需要,您可以编写一个稍微复杂一点的程序来检查可接受月份的列表,而不是匹配任何字母字符串。

如果这有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    相关资源
    最近更新 更多