¿Hay alguna utilidad que convierta POSIX a PCRE para PHP? [duplicar]
Pregunta
Esta pregunta ya tiene una respuesta aquí:
¿Hay alguna utilidad que convierta POSIX a PCRE para PHP? Estoy un poco confundido por el manual de PHP en PCRE, y aunque intentaré encontrar más información sobre PCRE, me preguntaba si alguien había diseñado dicha utilidad.
O, si alguien explicara cómo convertir lo siguiente, también estaría bien:
ereg("^#[01-9A-F]{6}<*>quot;, $sColor)
Pero explique cómo se hace, no solo dígame la conversión.
Solución
preg_match("/^#[01-9A-F]{6}$/", $sColor)
En este caso solo necesita agregar los dos delimitadores.
En perl puede escribir algo como
if ( s =~ /x.+y/ )
{ print "match"; }
Como puede ver, la expresión regular real está encapsulada en //. Si desea establecer una opción en la expresión regular, póngala después de la segunda /, p. cambiar la expresión a no greedy por defecto /x.+y/U
pcre ahora emula este comportamiento. Aunque debe llamar a una función, también debe proporcionar los delimitadores y establecer las opciones después del segundo delimitador. En perl, el delimitador debe ser /, con pcre puede elegir más libremente
preg_match("/^#[01-9A-F]{6}$/", $sColor)
preg_match("!^#[01-9A-F]{6}$!", $sColor)
preg_match("#^\#[01-9A-F]{6}$#", $sColor) // need to escape the # within the expression here
preg_match("^#[01-9A-F]{6}$
", $sColor)
de todos modos para pcre, lo mejor es elegir un carácter que no aparezca dentro de la expresión.
Otros consejos
preg_match (" / ^ # [01-9A-F] {6} $ / D " ;, $ sColor)
Tenga en cuenta el D
modificador . La gente lo olvida todo el tiempo. Sin ella, $
permitirá un carácter de nueva línea final. Una cadena como '' # 000000 \ n '' pasaría Esta es una sutil diferencia entre POSIX y PCRE.
Y, por supuesto, [01-9]
puede reescribirse en [0-9]
.
Por cierto, PHP admite expresiones regulares PCRE y POSIX. Aquí está la sección del manual de PHP sobre expresiones regulares POSIX, por lo que no tiene que convertirlas: http://www.php.net/manual/en/book.regex.php