【问题标题】:PHP preg_match return false on check of space characters [duplicate]PHP preg_match 在检查空格字符时返回 false [重复]
【发布时间】:2018-03-15 14:00:46
【问题描述】:

我需要有关此正则表达式检查的帮助。我是正则表达式的新手,所以请保释我。这就是我想要做的:

我正在尝试检查此日期范围是否在其声明中都有月份,例如Feb 10 - Feb 12 是正确的,而 Feb 10 - 12 应该会失败。此外,某些日期实例在月份和日期之间或- 和月份或日期之间可能没有空格。这是我的代码。

preg_match("/([A-Za-z]{3}\ *?\d{1,2}).*?\g{1}/", "Feb10 -feb 13")

但它总是失败。

【问题讨论】:

  • 好像你想要([A-Za-z]{3}\ *?\d{1,2}).*?(?1)。您是否尝试使用子例程而不是反向引用?
  • 谢谢大家,这两种解决方案都有效。
  • 我认为正则表达式不适合您的任务。 XYZ 12 - abc 34 呢?这些是好日子吗?找到一种方法将范围分成两个字符串。删除任何空间。然后只需$d=date_parse_from_format( "Mj","Feb10");

标签: php regex


【解决方案1】:

根据我在问题下方的原始评论。

See regex in use here

([A-Z]{3} *\d{1,2}) *- *(?1)
  • ([A-Z]{3} *\d{1,2}) 将以下内容捕获到捕获组 1
    • [A-Z]{3} 匹配任意 3 个大写 ASCII 字母。添加i 标志允许我们也匹配小写变体
    • *匹配任意数量的空格
    • \d{1,2} 匹配一位或两位数字
  • * 匹配任意数量的空格
  • - 从字面上匹配这个
  • *匹配任意数量的空格
  • (?1)递归第一个子模式

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2014-07-06
    • 2013-10-17
    • 1970-01-01
    • 2017-12-03
    相关资源
    最近更新 更多