Извините, что добавили еще один вопрос «Regex explain» в Интернет, но я должен знать причину этого. Я запустил это регулярное выражение через RegexBuddy и Regex101.com без какой-либо помощи.Regex - разница в \ n и n
Я натолкнулся на следующее регулярное выражение ("%4d%[^\\n]"
) при отладке функции разбора времени. Время от времени я получал ошибку «недействительной даты», но только в течение месяцев января и июня. Я издевался над некоторым кодом, чтобы воссоздать именно то, что происходило, но я не могу понять, почему удаление одной косой черты это исправляет.
<?php
$format = '%Y/%b/%d';
$random_date_strings = array(
'2015/Jan/03',
'1985/Feb/13',
'2001/Mar/25',
'1948/Apr/02',
'1948/May/19',
'2020/Jun/22',
'1867/Jul/09',
'1901/Aug/11',
'1945/Sep/21',
'2000/Oct/31',
'2009/Nov/24',
'2015/Dec/02'
);
$year = null;
$rest_of_string = null;
echo 'Bad Regex:';
echo '<br/><br/>';
foreach ($random_date_strings as $date_string) {
sscanf($date_string, "%4d%[^\\n]", $year, $rest_of_string);
print_data($date_string, $year, $rest_of_string);
}
echo 'Good Regex:';
echo '<br/><br/>';
foreach ($random_date_strings as $date_string) {
sscanf($date_string, "%4d%[^\n]", $year, $rest_of_string);
print_data($date_string, $year, $rest_of_string);
}
function print_data($d, $y, $r) {
echo 'Date string: ' . $d;
echo '<br/>';
echo 'Year: ' . $y;
echo '<br/>';
echo 'Rest of string: ' . $r;
echo '<br/>';
}
?>
Не стесняйтесь запускать это локально, но только два выхода, о которых я беспокоюсь, - это месяцы июня и января. "%4d%[^\\n]"
усечет $rest_of_string
к /Ju
и /Ja
в то время как "%4d%[^\n]"
отображает остаток строки, как и ожидалось (/Jan/03
& /Jun/22
).
Вот моя интерпретация неисправного регулярное выражение:
%4d%
- Получить четыре цифры.[^\\n]
- Ищите эти цифры между началом строки и новой строкой.
Может кто-нибудь исправить мои объяснения и/или сказать мне, почему удаление косой черты дает мне результат, который я ожидаю?
Мне все равно, КАК ... Мне нужно ПОЧЕМУ.
Это 'sscanf' синтаксис, это не имеет ничего общего с регулярным выражением :) –
@LucasTrzesniewski теперь я чувствую себя глупо, но меньше ума. Я выслежу некоторую документацию формата sscanf. – lampposteffect