Разделение тела статьи на фрагменты по маркерам
Задача этого шага – передать соответствующим переменным нужные фрагменты тела статьи. А чтобы было что передавать, фрагменты нужно найти в теле статьи с помощью регулярного выражения, пример которого приведен ниже:
` |
`, а не до последнего.
Если написал какую-нибудь фигню, то извините, в регулярных выражениях я не большой специалист, как и в программировании.
В связке с PHP-кодом регулярное выражение будет выглядеть так:
```
if (preg_match('|(.*?)
|is`
Маска регулярного выражения находится между вертикальными чертами `|`, чтобы исключить конфликт с элементами тега.
Модификаторы (после маски выражения).
- i - Регистронезависимый поиск (на само деле не очень нужен в примере).
- s – Означает, что символ точка включает в себя переносы строк, т.е. поиск будет по всем строкам, а не по одной.
Открывающий и закрывающий тэги разметки приведены в регулярном выражении в полном виде. Содержимое между тегов объединено в группу с помощью скобок и представляет из себя:
- Точка – Соответствует любому единичному символу.
- Звёздочка – После выражения, соответствующего единичному символу, соответствует нулю или более копий этого выражения.
- Знак вопроса – Ленивый (не жадный) квантификатор, означающий в данном примере, что поиск будет производится до первого закрывающего тега `(.*?)
|is', $page_content, $required_content))
{$intro=$required_content[1];}
```
Поскольку функция `preg_match()` возвращает количество найденных строк (или false в случае ошибки), мы сразу помещаем её внутрь оператора-условия `if`. Таким образом, если поиск не дал результатов, то и вторая строка кода выполняться не будет.
Функция `preg_match()` ищет соответствия шаблону регулярного выражения в переменной `$page_content ` и помещает результаты поиска в переменную `$required_content`.
Массив с результатами поиска (в нашем случае `$required_content`) состоит из двух частей: в `$required_content[0]` будут найденные строки вместе с открывающим и закрывающим тегами div, а в `$ required_content [1]` будут те же строки без тега div, т.е. тот текст, что находится в круглых скобках регулярного выражения. (Так должно быть, но у меня если честно, в обеих переменных текст без тега div.)
В случае, если с поиском всё тик-так, то сработает вторая строка кода, которая передаст переменной с уникальным (в рамках нашего кода) и понятным в контексте именем значение переменной `$ required_content [1]`, содержащей «чистые» результаты поиска.
Полный код извлечения фрагментов рассчитан на 10 блоков и выглядит так:
```
(.*?)