regex — соответствует концу строки в переполнении стека

Учитывая строку и регулярное выражение, как я могу убедиться, что она соответствует всей строке? То есть я не хочу, чтобы символ новой строки запускал конец совпадения — я хочу, чтобы он совпадал с самым концом строки.

Пример:

<?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.";
}

0

Решение

Использовать D модификатор:

D (PCRE_DOLLAR_ENDONLY)
Если этот модификатор установлен, метасимвол доллара в шаблоне совпадает только в конце строки темы. Без этого модификатора доллар также совпадает непосредственно перед последним символом, если он является новой строкой (но не перед любыми другими символами новой строки).

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

Другие решения

Вам нужно будет использовать модификатор многострочного шаблона m как это:

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

По вопросам рекламы [email protected]