Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Если Вам абсолютно ничего не известно о целевых данных, выбирайте максимальный квантификатор, поскольку он обычно оптимизируется чуть лучше минимального, особенно если следующий элемент регулярного выражения не позволяет использовать оптимизацию по символу, следующему за минимальным квантификатором.
Проверка символа, следующего за минимальным квантификатором.
При использовании минимальных квантификаторов в конструкциях вида /"(.*?)"/ механизм должен постоянно переходить между проверками совпадения квантифицированной конструкции (точки) и тем, что следует после нее ("). По этой и по ряду других причин минимальные квантификаторы обычно работают гораздо медленнее максимальных.<...> Если минимальный квантификатор заключен в сохраняющие круглые скобки, управление приходится постоянно передавать внутрь скобок и за их пределы, что приводит к дополнительным затратам времени.
Rate std lazy plus unroll lazy_2
std 14162/s -- -21% -62% -70% -78%
lazy 17921/s 27% -- -52% -62% -72%
plus 37121/s 162% 107% -- -20% -43%
unroll 46690/s 230% 161% 26% -- -28%
lazy_2 64631/s 356% 261% 74% 38% --
$str =~ /\G([-a-zA-Z0-9_]+) = "([^\s]*)" /gcx; # modern_1 - пессимистичный вариант, когда значение может быть пустым$str =~ /\G([-a-zA-Z0-9_]+) = "([^\s]+)" /gcx; # medern_2 - оптимистичный вариант, у нас гарантировано не будет пустых значений
Rate std lazy plus unroll lazy_2 modern_1 modern_2
std 24660/s -- -38% -65% -74% -83% -92% -93%
lazy 39456/s 60% -- -43% -58% -73% -87% -88%
plus 69591/s 182% 76% -- -26% -52% -76% -80%
unroll 93699/s 280% 137% 35% -- -35% -68% -73%
lazy_2 143913/s 484% 265% 107% 54% -- -51% -58%
modern_1 295080/s 1097% 648% 324% 215% 105% -- -14%
modern_2 341672/s 1286% 766% 391% 265% 137% 16% --
\s*\" ?\\" для нас означает «экранированный слеш и кавычка» или «слеш и экранированная кавычка»? Теперь Вы понимает, почему это важное соглашение?
Rate simple_expat simple_default simple_libxml_sax simpe_parser simple_expat_xs xml_twig tree_parser xml_parser xml_libxml regexp
xml_libxml 9754/s 1469% 1072% 673% 658% 645% 619% 230% 176% -- -81%
regexp 50355/s 8002% 5952% 3892% 3814% 3747% 3612% 1602% 1324% 416% --
Общие советы по составлению оптимальных регулярных выражений