2009-06-21 8 views
6

¿Hay alguna utilidad que convierta POSIX a PCRE para PHP? Estoy algo confundido por el manual de PHP en PCRE, y aunque trataré de encontrar más información sobre PCRE, me preguntaba si alguien había diseñado tal utilidad.¿Hay alguna utilidad que convierta POSIX a PCRE para PHP?

O, si alguien podría explicar cómo convertir los siguientes, que también sería bien:

ereg("^#[01-9A-F]{6}$", $sColor) 

Pero, por favor explicar cómo se hace, no sólo dime la conversión.

+1

interesante escribir 01-9, ¿por qué no 0-9? – VolkerK

Respuesta

6

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 se encapsula en //. Si desea establecer una opción en la expresión regular, colóquela después de la segunda /, p. cambiando la expresión a no codificado 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 tiene que ser /, con pcre puede elegir 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 la misma manera que pcre, es mejor elegir un carácter que no aparezca dentro de la expresión.

-1

Por cierto, PHP admite expresiones regulares tanto PCRE como 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

+2

Soy consciente de esto. Sin embargo, POSIX quedará obsoleto en PHP 5.3, por lo que estaba buscando mantener todo actualizado. – waiwai933

+0

Esta respuesta no está actualizada, ¿podría actualizarla? 'ereg()' está en desuso ahora – HamZa

4

preg_match("/^#[01-9A-F]{6}$/D", $sColor)

Nota del D modifier. La gente se olvida de eso todo el tiempo. Sin él, $ 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].

Cuestiones relacionadas