Займемося парсинга bb-code впритул.
Постановка задачі
Є текст, в якому присутні теги [url] в різних варіантах, а саме:
Як тексту, для тесту, я спорудив щось незрозуміле, але задовольняє умовам завдання. ось:
Цей текст охоплює, звичайно, не всі варіанти, які можливі, але якщо хочете, можете пограти з цим текстом :)
У регулярке застосовуються модифікатори gixe. Поясню що вони означають:
Поясню конструкцію (?: Щось). Вона всього-лише захоплює своє содеріжімое, як звичайні дужки, але, на відміну від них, не пише свій вміст в змінну з номером. Це економить пам'ять і час, а так же, не дає заплутатися в дужках і номерах змінних.
Отримані змінні $ 1, $ 2 і $ 3, відправляємо на розтерзання функції bb_url. Ось її код:
Як і в першому рішенні, ми врахували можливі прогалини навколо знака рівності і парність лапок.
Зазначене рішення, так само працює. При проведених мною тестах, не було виявлено ніяких розбіжностей в результатах роботи обох рішень. Однак, хотілося б знати, яке з них ефективніше?
ефективність
Підхід простий, як апельсин. Запам'ятати час старту і час закінчення роботи решнія, а потім відняти і дізнатися час роботи. Регулярні вирази Perl працюють дуже швидко, тому навіть на досить великому обсязі тексту, швидкість роботи дорівнювала 0. Тому довелося спорудити цикл, в якому багато разів змінної $ text присвоювалося одне і те ж значення, а потім, воно розбиралася одним з рішень. Я проводив 10000 замін. Повний код рішення приводити тут не буду, покажу лише псевдокод.
$ Start = times;
for ($ i = 0; $ i<10000;$i++)
встановлюємо $ text;
проганяє $ text через регулярку;
>
$ End = times;
$ Diff = $ end- $ start;
print $ diff;
Додаю свій скрипт. яким я тестував ці рішення.
В результаті тестувань, я отримував результати які виглядали приблизно так:
Велика регулярка: 0.359
Дві маленьких: 0.235
Висновок: ефективніше використовувати дві маленьких регулярки, ніж одну наворочену. Чорт, а шкода, така вона гарна.
У цій статті ми розглянули конкретний приклад парсинга тексту сайту. Якщо ви хочете отримати щось подібне, професійно виконане на свій сайт - замовте грабер або парсер у мене.