Обновить
10
Noname@Castle

InfoSec

2
Подписчики
Отправить сообщение
std и plus правлены мною.
Насчёт моего утверждение, что plus не съест пустые кавычки — я был не прав. Извините. Это всё моя невнимательность… Остальное вроде так как и говорил.
И кстати, выше я предлагал выражение "((?>[^"\\]*|\\.)*)". Тут грубейшая ошибка!) Думаю сами догадались какая :)
$str = ' cb «zero \» one\\\\" two \\\\\" free \\\\\\\\" four \\\\\\\\\" no!" ';
print "$str\n\n";
print «1) lazy2 < $1 >\n» while $str =~ m/"(.*?)"(?<!\\")/g;
print «2) plus < $1 >\n» while $str =~ m/"(([^"\\]+|\\.)*)"/g;
print «3) std < $1 >\n» while $str =~ m/"((?>[^"\\]+|\\.)*)"/g;
print «4) lazy < $1 >\n» while $str =~ m/"(.*?)(?<!\\)"/g;
print «5) unroll < $1 >\n» while $str =~ m/"([^"\\]*(?:\\.[^"\\]*)*)"/g;
print «6) ??? < $1 >\n» while $str =~ m/"(.*?)"(?<! \\")/g;

cb «zero \» one\\" two \\\" free \\\\" four \\\\\" no!"

1) lazy2 < zero \" one\\" two \\\" free \\\\" four \\\\\" no! >
2) plus < zero \" one\\ >
2) plus < free \\\\ >
2) plus < no! >
3) std < zero \" one\\ >
3) std < free \\\\ >
3) std < no! >
4) lazy < zero \" one\\" two \\\" free \\\\" four \\\\\" no! >
5) unroll < zero \" one\\ >
5) unroll < free \\\\ >
5) unroll < no! >
6) ??? < zero \" one\\ >
6) ??? < free \\\\ >
6) ??? < no! >
согласен :)
Однако можно извратиться и снова получить инъекцию в split /$input:/
:)
извините, но выражение по вашей ссылке на мой субъективный взгляд некорректны :)
1) std
сохраняющие скобки захватывают не то что надо, +атомарная группировка и квантификатор должны немного улучшить дело :)
"((?>[^"\\]*|\\.)*)" — так мне кажется корректней. По идее и быстрее. Извините, щас проверить не могу, нет ничего под рукой…
2) lazy
"(.*?)(?<!\\)"
Как я понял он некорректен при выражении вида \\"
У lazy_2 та же проблема.
3) plus
не съест найдёт пустый строки ""

Получается только unroll валидный для отловки текста между двумя кавычками :) В нём вроде как всё выглядит нормально. По крайней мере на первый взгляд :)
Щас будем думать как и его улучшить. :)

надо использовать особенности того языка, на котором пишешь. А иначе теряется вся прелесть того или иного ЯП.
Ниже промазал, извините :)
надо использовать особенности того языка, на котором пишешь. А иначе теряется вся прелесть того или иного ЯП.
На регулярки было бы интересно взглянуть. В идеале и на хронометраж.
Можно поподробнее насчёт «грязного трюка»???
Чем вам \Q… \E не нравится?
ну вот… только на обед обжарил мясо… и картошечку на сале…
Вот бы ввели бои между игроками. Можно былоб в бою кастануть подзатыльник.
Ещё бы к важным я причислил управление компиляцией… интерполюцией… предварительным копированием…
Очень часто полезно применение атомарные группировки…

Вообще, не зная принципов работы НКА не стоит даже пытаться что-либо оптимизировать. Особенно в работе с квантификаторами :) Велик шанс того, что эффект будет обратным. Либо вообще измените результат работы патерна.
1 пункт оптимизаторы обычно правят сами :)
mplayer и pulseaudio у меня не стоит… второй скрипт работает…
Debian, 32 bit, работает.
/i вам в помощь :)
Просто тут привязки к языкам нету.
Я всегда думал что поддержка различных ограничителей производится на уровне конкретного языка(к примеру Perl). Разве она осуществляется на уровне патернов???
В первой строке цитировал. Извините.
Добавлю, что \w — это [a-zA-Z_0-9]
В большинстве случаев \w поддерживает юникод и там не только латинские буквы!

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность