Заміна bb-code, тег url

Займемося парсинга 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

Висновок: ефективніше використовувати дві маленьких регулярки, ніж одну наворочену. Чорт, а шкода, така вона гарна.

У цій статті ми розглянули конкретний приклад парсинга тексту сайту. Якщо ви хочете отримати щось подібне, професійно виконане на свій сайт - замовте грабер або парсер у мене.

Схожі статті