Para aclarar/agregar otro detalle a la respuesta anterior: la biblioteca PCRE acepta el patrón como una cadena terminada en nulo "C". (Citando documentos PCRE: "El patrón es una cadena C terminada por un cero binario"). Eso significa que el patrón no puede contener un carácter literal NUL; en su lugar, siempre se debe evitar utilizando los medios descritos en otras respuestas. ("A diferencia de la cadena del patrón, el sujeto puede contener ceros binarios." "4. Aunque los caracteres binarios cero son compatibles con la cadena del asunto, no están permitidos en una cadena de patrón porque se pasa como un 0-mal C string, terminada por cero la secuencia de escape \ 0 se puede utilizar en el patrón para representar un cero binario ")
carácter NUL es el único personaje en el patrón de PCRE que debe ser escapado, todos los demás pueden ir literal..: "No existe ninguna restricción en la apariencia de los caracteres que no se imprimen, además del cero binario que termina un patrón".
Como nota final comparativa, algunos otros motores de expresiones regulares compatibles con Perl permiten NUL literales en un patrón, por ejemplo, el SRE de Python. P.ej. urlib.parse de Python3 tiene la siguiente línea: _asciire = re.compile('([\x00-\x7f]+)')
. Nótese la falta de "r" para significar el literal sin procesar, significa que el desapapeleo aquí ocurre en el nivel de Python, y el módulo re obtiene los caracteres con los valores 0x00 y 0x7f en el patrón.
gracias. Funciona de maravilla, pero no puedo usar ninguna de mis herramientas 'visuales' para trabajar con el nulo, pero el Grep de Regex Buddy lo hará detrás de escena. – Keng
Parece que ['\ x0' debería funcionar] (http://superuser.com/a/287998/2259) también. – l0b0
No debería hacer '\ x0' a menos que sea lo único que coincida. si estabas tratando de hacer coincidir '\ x0apple' que iba a tratar de hacer coincidir con' \ npple' – Augwa