regular online php regex codepad

php - online - Advertencia: preg_match(): pcre_fullinfo interno()



php regular expression (1)

Tengo el siguiente código de trabajo:

$test = ''123456''; $int = preg_match(''/^/d+$/'', $test, $matches); print_r(array($int, $matches));

Sin embargo, cuando lo ejecuto en el teclado , aparece el error:

Advertencia: preg_match (): error interno de pcre_fullinfo () -3 en la línea 5

Pero el código se ejecuta en mi propia máquina (y el código debería estar bien, en mi humilde opinión).

Necesito distribuir mi código en el futuro, por lo que sería malo si se rompiera dependiendo de alguna configuración. Entonces, ¿cuál es la razón por la que el teclado se rompe en él?


El código ejecutado a través del teclado se ejecuta en un entorno muy restringido:

La ejecución del código es manejada por un supervisor basado en geordi. La estrategia es ejecutar todo bajo ptrace, con muchas llamadas al sistema rechazadas o ignoradas . Los compiladores y los ejecutables finales se ejecutan en una jaula chroot, con estrictos límites de recursos. El supervisor está escrito en Haskell.

Si bien no es algo que se esperaría que rompiera un motor de expresiones regulares, es muy posible que la biblioteca pcre use algo interno que esté bloqueado por el entorno del teclado. Ningún sistema de producción utiliza restricciones tan severas, por lo que debe estar seguro de usar ese código en su aplicación.

El código de error significa "PCRE_ERROR_BADOPTION - el valor de lo que no era válido". Sin embargo, el código en la fuente PHP donde se produce el error es rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats); que utiliza una constante para qué . Así que claramente significa que la biblioteca pcre está rota en el teclado.

Si quisiera estar completamente seguro, podría escribir un pequeño programa en C usando libpcre para llamar a esa función en la misma expresión regular.