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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top