匹配PHP中字符串的结尾

时间:2015-01-07 18:25:15

标签: php regex newline

给定字符串和正则表达式,如何确保它与整个字符串匹配?也就是说,我不想让换行符触发匹配结束 - 我希望它匹配到字符串的最后一端。

示例:

<?php
// simplified date pattern
$pattern = "/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/";
$d = "2014-01-05\n"; // OOPS - this will match
if(preg_match($pattern, $d)) {
    echo "This is a date string.";
}

2 个答案:

答案 0 :(得分:4)

使用D modifier

  

D(PCRE_DOLLAR_ENDONLY)
  如果设置了此修饰符,则模式中的美元元字符仅匹配主题字符串的末尾。如果没有此修饰符,如果它是换行符(但不在任何其他换行符之前),则美元也会在最终字符之前立即匹配。

$pattern = "/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/D";

答案 1 :(得分:0)

您需要使用多行模式修饰符m,如下所示:

$pattern = "/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}$/m"; // note m at end after pattern