sscanf($str, '%2s%2s%2s', $year, $month, $day);
? Зачем сюда list() городить ? Поиск литеральных символов (буквы латинского алфавита):
~<\pL+\d?\K.*?(?=>)~
^^^^
После букв может находиться одна (или ни одной) цифра (например для тега h1):
~<\pL+\d?\K.*?(?=>)~
^^^
Далее записана последовательность символов \K, означающая очистку буфера (удаление из памяти REGEXP ранее найденных соответствий):
~<\pL+\d?\K.*?(?=>)~
^^
Далее следует любая последовательность символов:
~<\pL+\d?\K.*?(?=>)~
^^^
За которыми обязательно должна быть угловая скобка:
~<\pL+\d?\K.*?(?=>)~
^^^^^
потому что часто используется и, самое главное, быстрее читается и понимается "/".Это ваше субъективное мнение. На сколько я помню, диалект PCRE допускает в качестве разделителей любые символы, кроме букв и чисел. Лично я использую PCRE в связке с PHP, там наоборот часто встречается слеш "/". Поэтому ваш аргумент в контексте этого топика - не аргумент, т.к. вопрос задан именно с тегом PHP.
Уберите всю "воду" из первого поста, и напишите всего лишь пример исходного кода, подлежащего обработке, и результирующий его вид - так будет много проще понять суть задачи.