regulares probar preg_replace preg_match lista expresiones especiales ejemplos caracteres php regex

probar - preg_replace php ejemplos



Compilar expresiones regulares en PHP (5)

las expresiones regulares de preg pueden usar el modificador S (estudio) en mayúscula, que es probablemente lo que estás buscando.

http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

S

Cuando se va a usar un patrón varias veces, vale la pena dedicar más tiempo analizándolo para acelerar el tiempo necesario para la coincidencia. Si se establece este modificador, entonces se realiza este análisis adicional. En la actualidad, estudiar un patrón es útil solo para patrones no anclados que no tienen un solo carácter inicial fijo.

¿Hay alguna forma en PHP para compilar una expresión regular, de modo que luego se pueda comparar con múltiples cadenas sin repetir el proceso de compilación? Otros lenguajes principales pueden hacer esto: Java, C #, Python, Javascript, etc.


Como ya ha dicho otro comentador, las expresiones regulares de PCRE ya están compiladas sin que usted tenga que referirse específicamente a ellas como tales, PCRE mantiene un hash interno indexado por la cadena original que proporcionó.


No estoy seguro de que puedas. Si revisa Mastering Regular Expressions , algunas técnicas de optimización específicas de PHP se tratan en el Capítulo 10: PHP. Específicamente, el uso del modificador de patrón S para hacer que el motor de expresiones regulares "Estudie" la expresión regular antes de aplicarla. Dependiendo de su patrón y su texto, esto podría darle algunas mejoras de velocidad.

Editar : puede echar un vistazo al contenido del libro utilizando books.google.com .


El subproceso es el subproceso en el que se está ejecutando actualmente el script. Después del primer uso, la expresión regular compilada se almacena en caché y la próxima vez que se usa, PHP no la vuelve a compilar.

Prueba simple:

<?php function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } // test string $text=''The big brown <b>fox</b> jumped over a lazy <b>cat</b>''; $testTimes=10; $avg=0; for ($x=0; $x<$testTimes; $x++) { $start=microtime_float(); for ($i=0; $i<10000; $i++) { preg_match_all(''/<b>(.*)<//b>0?/'', $text, $m); } $end=microtime_float(); $avg += (float)$end-$start; } echo ''Regexp with caching avg ''.($avg/$testTimes); // regexp without caching $avg=0; for ($x=0; $x<$testTimes; $x++) { $start=microtime_float(); for ($i=0; $i<10000; $i++) { $pattern=''/<b>(.*)<//b>''.$i.''?/''; preg_match_all($pattern, $text, $m); } $end=microtime_float(); $avg += (float)$end-$start; } echo ''<br/>Regexp without caching avg ''.($avg/$testTimes);

Regexp con almacenamiento en caché promedio 0.1 Regexp sin almacenamiento en caché promedio 0.8

¡El almacenamiento en caché de una expresión regular lo hace 8 veces más rápido!


Es posible que la biblioteca Perl-Compatible Regular Expressions ya se haya optimizado para su caso de uso sin proporcionar una clase Regex como otros idiomas:

Esta extensión mantiene un caché global por subproceso de expresiones regulares compiladas (hasta 4096).

PCRE Introducción

Así es como el modificador de estudio que Imran describió puede almacenar la expresión compilada entre llamadas.