Existe um utilitário que irá converter POSIX para PCRE para PHP? [duplicado]
Pergunta
Esta questão já tem uma resposta aqui:
Existe um utilitário que irá converter POSIX para PCRE para PHP? Eu estou um pouco confuso com o manual do PHP em PCRE, e enquanto eu vou tentar encontrar mais informações sobre PCRE, eu queria saber se alguém tinha projetado tal utilidade.
Ou, se alguém poderia explicar como converter o seguinte, que também seria ótimo:
ereg("^#[01-9A-F]{6}$", $sColor)
Mas por favor, explique como é feito, e não apenas dizer-me a conversão.
Solução
preg_match("/^#[01-9A-F]{6}$/", $sColor)
In this case you only need to add the two delimiters.
In perl you can write something like
if ( s =~ /x.+y/ )
{ print "match"; }
As you can see the actual regular expression is encapsulated in //. If you want to set an option on the regular expression you put it after the second /, e.g. switching the expression to ungreedy by default /x.+y/U
pcre now emulates this behaviour. Though you have to call a function you also have to provide the delimiters and set the options after the second delimiter. In perl the delimiter has to be /, with pcre you can chose more freely
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)
all o mesmo para pcre, melhor para escolher um personagem que não aparece dentro da expressão.
Outras dicas
preg_match("/^#[01-9A-F]{6}$/D", $sColor)
Observe o D
modificador . As pessoas esquecem sobre isso o tempo todo. Sem ele $
permitirá que um caractere final de nova linha. A string como "# 000000 \ n" iria passar. Esta é uma diferença sutil entre POSIX e PCRE.
E, claro, [01-9]
pode ser reescrito para [0-9]
.
A propósito, PHP suporta tanto PCRE e expressões regulares POSIX. Aqui é a seção do manual do PHP em expressões regulares POSIX, assim você não tem que convertê-los: http://www.php.net/manual/en/book.regex.php