Есть регулярка $text=~m/<\s*(.+?)\s*>((.*?\n?)*)<\/\s*\1\s*>/gi
такую штуку
<? xml ?>
<test>
abchfss
</test>
<ls>
abcdfasd
</ls>
<ln>
daasdf
</ln>
<lala>abcdgs</lala>
обрабатывает секунд 30, в случае чегото такого
<? xml ?>
<test>
<t>abchfss</t>
<ls>abcdfasd</ls>
<lala>abcdgs</lala>
</test>
<test>
<t>test</t>
<ls>test2</ls>
<lala>test3</lala>
</test>
<ln>
daasdf
</ln>
вообще зависает наглухо. В чем может быть причина? заранее спасибо.
Решено: Регулярка (perl)
Модератор: Модераторы разделов
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Решено: Регулярка
хороший пример тормознутости нежадных выражений ;)
спасибо
-
nuclear17
- Сообщения: 117
- ОС: linux/mac/win
Re: Решено: Регулярка
нашел решение путем замены (.*?\n?)* на (?s:.*?).
Вопрос номер 2 что означает ?s: ?
Вопрос номер 2 что означает ?s: ?
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Решено: Регулярка
Нежадные + * очень плохо сказываются на скорости. Замените хотя бы (.+?) на ([^>\s]+) и скорость повысится.
Спасибо сказали:
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Решено: Регулярка
(?: ) используется для группировки без выделения в \1, \2 и т.п.
(?s: ) - дополнительно флаг интерпретировать как однострочное выражение
(?s: ) - дополнительно флаг интерпретировать как однострочное выражение
Спасибо сказали:
-
nuclear17
- Сообщения: 117
- ОС: linux/mac/win
Re: Решено: Регулярка
Всем спасибо, тему можно закрывать