【问题标题】:Regex to match numbers between dates正则表达式匹配日期之间的数字
【发布时间】:2021-06-23 15:58:46
【问题描述】:

我需要一些帮助来匹配两个日期之间的一些数字,例如: 26/03/20213539-4 / 107512-826/03/2021R$

我尝试了(很多),并且在 regexr.com 中我的模式有效,但是当我在 PHP preg_match 中尝试时不起作用

我的代码:

$str = '26/03/20213539-4 / 107512-826/03/2021';
preg_match('/(?<=[0-9]{2}\/[0-9]{2}\/[0-9]{4})([^]*)(?=[0-9]{2}\/[0-9]{2}\/[0-9]{4})/', $str, $match);
echo $match;

谁能告诉我我的错误在哪里?

【问题讨论】:

  • 你的预期输出是什么?

标签: php regex


【解决方案1】:

您的 POSIX 字符组中缺少 ^ 的引号。在您的模式中,将[^] 替换为[\^]。然后它会匹配。

因为你看,[^] 不是一个有效的组(它不是一个字符的组"^")。不,而是在您的情况下:[^]*)(?=[0-9] 它是带有 ]*)(?=[0-9 字符的 inverted 组(因为语法 [^ ] 反转了组)。所以你必须以某种方式解决这个问题。通过引用 \^ 或引入其他匹配任何字符的形式。

你想匹配任何字符,包括换行符吗?因为如果是这种情况,那么只需使用. 并添加标志s(小写) - 点匹配所有。

您应该使用pattern($p)->test($string),而不是使用preg_match()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多