A seguir está uma coleção de códigos de função comuns para expressões regulares em PHP para facilitar o aprendizado da expressão regular PHP
preg_grep.
(PHP 4, PHP 5)
preg_grep -- Retorna descrições de células do array que correspondem ao padrão
array preg_grep (string pattern, array input [, int flags])
preg_grep() Retorna um array contendo as células no array de entrada que correspondem ao padrão padrão fornecido.
sinalizadores podem ser os seguintes sinalizadores:
PREG_GREP_INVERT
Se passado neste sinalizador, preg_grep() retorna células na matriz de entrada que não correspondem ao padrão fornecido. Esta tag está disponível desde o PHP 4.2.0.
A partir do PHP 4.0.4, os resultados retornados por preg_grep() são indexados usando as chaves do array de entrada. Se você não quiser tais resultados, use array_values() para reindexar os resultados retornados por preg_grep().
A descrição acima é a descrição de preg_grep() no manual. Em primeiro lugar, esta é uma função regular compatível com Perl, então acho que preg_grep significa p(perl)reg(regular)_grep. Sua característica é que pode ser usada para arrays através de sua própria expansão, pode ser usada para regular. correspondência em matrizes multidimensionais e pode retornar uma matriz correspondente ou não correspondente por meio do parâmetro flags. Sua eficiência é muito mais rápida do que usar a estrutura foreach(...){if...} (não verificada) e pode corresponder a padrões complexos. É de grande utilidade em aplicações como pesquisa e classificação.
exemplo:
<?
$arr = array('abc'=>12.213,'bb'=>12345,'ba'=>23.2321,34.3,'23'=>'3.3','23434'=>'bbb');
// Retorna todos os elementos do array contendo números de ponto flutuante.
$fl_array = preg_grep ("/^(d+)?.d+$/", $arr);
print_r($fl_array);
?>
preg_match
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match -- Instruções de correspondência de expressões regulares
int preg_match (string pattern, string subject [, array matches [, int flags]] )
pesquisa na string do assunto por conteúdo que corresponda à expressão regular fornecida pelo padrão.
Se forem fornecidas correspondências, ele será preenchido com os resultados da pesquisa. $matches[0] conterá o texto que corresponde ao padrão inteiro, $matches[1] conterá o texto que corresponde ao primeiro subpadrão capturado entre parênteses e assim por diante.
sinalizadores podem ser os seguintes sinalizadores:
PREG_OFFSET_CAPTURE
Se este sinalizador for definido, o deslocamento da string associado também será retornado para cada ocorrência de uma correspondência. Observe que isso altera o valor do array retornado para que cada célula nele também seja um array, onde o primeiro item é a string correspondente e o segundo item é seu deslocamento. Esta tag está disponível desde o PHP 4.3.0.
O parâmetro flags está disponível desde o PHP 4.3.0.
preg_match() retorna o número de vezes que o padrão é correspondido. 0 vezes (sem correspondência) ou 1 vez, já que preg_match() irá parar de pesquisar após a primeira correspondência. preg_match_all(), ao contrário, irá pesquisar até o final do assunto. Se ocorrer um erro, preg_match() retorna FALSE.
Dica: Se você quiser apenas ver se uma string está contida em outra string, não use preg_match(). Você pode usar strpos() ou strstr(), que é muito mais rápido.
O acima é a descrição de preg_match() no manual. Acho que a função desta função é que ela pode ser usada para verificação, ou seja, se uma determinada string atende a determinados requisitos. A limitação é que, conforme mencionado acima, ele corresponde a 0 ou 1 vez. E o valor de retorno é o número de correspondências. Quando uma correspondência completa é necessária, preg_match_all() pode ser usado. Também vale a pena mencionar a função do array $matches, que pode ser usado como o valor de retorno do padrão próprio, o que às vezes é útil.
Exemplo:
<?
if (preg_match ("/(bwebb)s(d)/i", "PHP é a linguagem de script web 45 web 34 preferida.",$match)) {
print "Uma correspondência foi encontrada.";
print_r($correspondência);
} outro {
print "Uma correspondência não foi encontrada.";
}
?>
<?php
// Obtém o nome do host da URL
preg_match("/^(http://)?([^/]+)/i",
" http://www.php.net/index.html ", $matches);
$host = $correspondências[2];
// Obtém os próximos dois segmentos do nome do host
preg_match("/[^./]+.[^./]+$/", $host, $correspondências);
echo "nome de domínio é: {$matches[0]}n";
?>
preg_match_all
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_match_all -- Executa a correspondência global de expressões regulares A explicação desta função no manual é muito clara, então não vou explicar mais.
ilustrar
int preg_match_all (string pattern, string subject, array matches [, int flags])
procura todo o conteúdo no assunto que corresponda à expressão regular dada pelo padrão e coloca os resultados em correspondências na ordem especificada pelos flags.
Após a primeira correspondência ser encontrada, as pesquisas subsequentes começam no final da correspondência anterior.
flags podem ser uma combinação dos seguintes flags (observe que não faz sentido usar PREG_PATTERN_ORDER e PREG_SET_ORDER juntos):
PREG_PATTERN_ORDER
Classifique os resultados para que $matches[0] seja uma matriz de todas as correspondências de padrões, $matches[1] seja uma matriz de strings correspondidas pelo subpadrão no primeiro colchete e assim por diante.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", "<b>exemplo: </b><div align=left>este é um teste</div >",
$out, PREG_PATTERN_ORDER);
imprimir $out[0][0].", ".$out[0][1]."n";
imprimir $out[1][0].", ".$out[1][1]."n";
?>
Este exemplo produzirá:
<b>exemplo: </b>, <div align=left>este é um teste</div>
exemplo: , este é um teste.
Portanto, $out[0] contém a string que corresponde a todo o padrão e $out[1] contém a string entre um par de tags HTML.
PREG_SET_ORDER
Classifique os resultados de forma que $matches[0] seja a matriz do primeiro conjunto de correspondências, $matches[1] seja a matriz do segundo conjunto de correspondências e assim por diante.
<?php
preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
"<b>exemplo: </b><div align=left>isto é um teste</div>",
$fora, PREG_SET_ORDER);
imprimir $out[0][0].", ".$out[0][1]."n";
imprimir $out[1][0].", ".$out[1][1]."n";
?>
Este exemplo produzirá:
<b>exemplo: </b>, exemplo:
<div align=left>isto é um teste</div>, isto é um teste
Neste exemplo, $matches[0] é o primeiro conjunto de resultados correspondentes, $matches[0][0] contém o texto que corresponde ao padrão inteiro, $matches[0][1] contém o texto que corresponde ao primeiro subpadrão , terminando com E assim por diante. Da mesma forma, $matches[1] é o segundo conjunto de correspondências e assim por diante.
PREG_OFFSET_CAPTURE
Se este sinalizador for definido, o deslocamento da string associado também será retornado para cada ocorrência de uma correspondência. Observe que isso altera o valor do array retornado para que cada célula também seja um array, onde o primeiro item é a string correspondente e o segundo item é seu deslocamento dentro do assunto. Esta tag está disponível desde o PHP 4.3.0.
Se nenhuma tag for fornecida, PREG_PATTERN_ORDER será assumido.
Retorna o número de vezes que todo o padrão foi correspondido (possivelmente zero) ou FALSE em caso de erro.
Exemplo 1. Obtenha todos os números de telefone de uma mensagem de texto
<?php
preg_match_all ("/(? (d{3})? )? (?(1) [-s] ) d{3}-d{4}/x",
"Ligue para 555-1212 ou 1-800-555-1212", $telefones);
?>
Exemplo 2. Pesquisa por tags HTML correspondentes (ganancioso)
<?php
// \2 é um exemplo de referência reversa, seu significado em PCRE é
// Deve corresponder ao conteúdo do segundo conjunto de colchetes na própria expressão regular, neste caso
// Isso é ([w]+). Como a string está entre aspas duplas, você precisa
//Adicione uma barra invertida extra.
$html = "<b>texto em negrito</b><a href=howdy.html>clique em mim</a>";
preg_match_all ("/(<([w]+)[^>]*>)(.*)(</\2>)/", $html, $correspondências);
for ($i=0; $i< contagem($correspondências[0]); $i++) {
echo "correspondente: ".$correspondências[0][$i]."n";
echo "parte 1: ".$matches[1][$i]."n";
echo "parte 2: ".$matches[3][$i]."n";
echo "parte 3: ".$matches[4][$i]."nn";
}
?>
preg_quote
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_quote – descrição do caractere de expressão regular de escape
string preg_quote ( string str [, delimitador de string] )
preg_quote() usa str como parâmetro e adiciona uma barra invertida na frente de cada caractere que pertence à sintaxe da expressão regular. Se você precisar corresponder uma string gerada dinamicamente como um padrão, poderá usar esta função para escapar dos caracteres especiais que ela pode conter.
Se o delimitador de argumento opcional for fornecido, esse caractere também terá escape. Pode ser usado para escapar do delimitador exigido pela função PCRE. O delimitador mais comumente usado é a barra /.
Caracteres especiais para expressões regulares incluem: . + * ? [ ^ ] $ ( ) { } = !
Nota: Esta função é segura para uso em objetos binários.
A explicação acima está no manual, que é muito clara, então não vou entrar em detalhes. Além disso, há uma observação no manual de que esta função pode ser usada com segurança para objetos binários, o que é muito útil.
Exemplo: Exemplo 1. exemplo preg_quote()
<?php
$keywords = '$40 por um g3/400';
$palavras-chave = preg_quote($palavras-chave, '/');
echo $keywords; // retorna $40 para um g3/400
?>
Exemplo 2. Adicione itálico a uma palavra em um texto
<?php
// Neste exemplo, preg_quote($word) é usado para manter o asterisco fora da expressão regular
// Tem um significado especial.
$textbody = "Este livro é *muito* difícil de encontrar.";
$palavra = "*muito*";
$textbody = preg_replace ("/".preg_quote($palavra)."/",
"<i>".$palavra."</i>",
$corpo do texto);
?>
O próximo passo é aplicar a função preg_replace que é super flexível, super poderosa e muito usada.
preg_replace
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_replace – realiza pesquisas de expressões regulares e instruções de substituição
misto preg_replace (padrão misto, substituição mista, assunto misto [, int limite])
procura no assunto correspondências do padrão padrão e as substitui por substituição. Se limit for especificado, apenas as correspondências de limite serão substituídas. Se limit for omitido ou tiver um valor de -1, todas as correspondências serão substituídas.
replacement pode conter uma referência anterior no formato \n ou (desde o PHP 4.0.4) no formato $n, sendo o último o preferido. Cada uma dessas referências será substituída por texto correspondente ao enésimo subpadrão entre colchetes capturado. n pode variar de 0 a 99, onde \0 ou $0 refere-se ao texto correspondido por todo o padrão. Conte o parêntese esquerdo da esquerda para a direita (começando em 1) para obter o número de subpadrões.
Para padrões de substituição que seguem uma referência retroativa por um número (ou seja, um número que segue imediatamente um padrão correspondente), a notação familiar \1 não pode ser usada para representar a referência retroativa. Por exemplo, \11 deixará preg_replace() confuso se deseja uma referência anterior de \1 seguida pelo número 1 ou uma referência anterior de \11 . A solução neste caso é usar ${1}1. Isso cria uma referência anterior isolada para $1, deixando o outro 1 apenas um literal.
Se for encontrada uma correspondência, o assunto substituído será retornado, caso contrário, o assunto original será retornado.
Cada parâmetro de preg_replace() (exceto limit) pode ser um array. Se tanto o padrão quanto a substituição forem arrays, eles serão processados na ordem em que suas chaves aparecem no array. Isso não é necessariamente igual à ordem numérica do índice. Se um índice for usado para identificar qual padrão deve ser substituído por qual substituição, o array deve ser classificado com ksort() antes de chamar preg_replace().
Se o assunto for uma matriz, uma pesquisa e substituição será realizada em cada item do assunto e uma matriz será retornada.
Se padrão e substituição forem arrays, preg_replace() retirará os valores deles para pesquisar e substituir o assunto. Se houver menos valores na substituição do que no padrão, uma string vazia será usada como o valor de substituição restante. Se padrão for uma matriz e substituição for uma sequência, essa sequência será usada como valor de substituição para cada valor no padrão. O contrário não tem sentido.
O modificador /e faz com que preg_replace() trate o argumento de substituição como código PHP (após a substituição das referências anteriores apropriadas). Dica: Certifique-se de que a substituição forme uma string de código PHP válida, caso contrário o PHP reportará um erro de análise de sintaxe na linha que contém preg_replace().
Nota: O parâmetro limit foi adicionado após o PHP 4.0.1pl2.
Acho que seu poder é que ele pode não apenas lidar com strings, mas também com arrays, e sua função de referência reversa é muito flexível. Basicamente, ele pode atender à maioria das necessidades dos usuários comuns. Se não for competente, também temos a função preg_replace_callback(), que pode personalizar a função de retorno de chamada para atender aos seus requisitos avançados. Como projetar filtros, etc.
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback - Use a função de retorno de chamada para realizar pesquisas de expressões regulares e substituir instruções
misto preg_replace_callback (padrão misto, retorno de chamada, assunto misto [, limite interno])
Esta função se comporta quase como preg_replace(), exceto que em vez de fornecer um parâmetro de substituição, uma função de retorno de chamada é especificada. Esta função recebe como entrada um array de correspondências na string de destino e retorna a string usada para substituição.
Exemplo 1. exemplo preg_replace_callback()
<?php
// Este texto é para 2002,
// Agora quero disponibilizá-lo para 2003
$text = "O dia da mentira é 01/04/2002n";
$text.= "O último Natal foi em 24/12/2001n";
//função de retorno de chamada
função próximo_ano($correspondências) {
// Normalmente: $matches[0] é a correspondência completa
// $matches[1] é a correspondência do subpadrão no primeiro colchete
// e assim por diante
retornar $correspondências[1].($correspondências[2]+1);
}
eco preg_replace_callback(
"|(d{2}/d{2}/)(d{4})|",
"próximo_ano",
$texto);
//O resultado é:
// O dia da mentira é 01/04/2003
// O último Natal foi em 24/12/2002
?>
Freqüentemente, você precisará da função de retorno de chamada para preg_replace_callback() em apenas um lugar. Nesse caso, você pode usar create_function() para declarar uma função anônima como retorno de chamada dentro da chamada para preg_replace_callback(). tenha todas as informações para a chamada em um só lugar e não sobrecarregue o namespace da função com um nome de função de retorno de chamada não usado em nenhum outro lugar.
Para amigos que usam a função preg_replace_callback(), você provavelmente precisará da função de retorno de chamada (caso contrário, por que usá-la? Não é melhor usar preg_replace diretamente), mas geralmente ela é usada apenas em um lugar. Neste caso você pode usar create_function() para declarar uma função anônima como a função de retorno de chamada de preg_replace_callback(). Desta forma, satisfazemos a necessidade de declarar informações sem nos confundirmos com um nome de função que não será utilizado novamente.
Exemplo 2. preg_replace_callback() e create_function()
<?php
/* Um filtro de linha de comando no estilo UNIX que remove a string no início de cada parágrafo
*Converta letras maiúsculas em minúsculas*/
$fp = fopen("php://stdin", "r") or die("não consigo ler stdin");
enquanto (!feof($fp)) {
$linha = fgets($fp);
$linha = preg_replace_callback(
'|<p>s*w|',
criar_função(
// O uso de aspas simples aqui é fundamental,
// Caso contrário, substitua todos os $ por $
'$correspondências',
'return strtolower($correspondências[0]);'
),
$ linha
);
eco $ linha;
}
fclose($fp);
?>
Finalmente
preg_split
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
preg_split – Divida uma string usando expressões regulares. Não entrarei em detalhes aqui.
ilustrar
array preg_split (string pattern, string subject [, int limit [, int flags]] )
retorna uma matriz contendo as substrings na divisão do assunto ao longo dos limites que correspondem ao padrão.
Se o limite for especificado, no máximo as substrings de limite serão retornadas. Se o limite for -1, significa que não há limite e pode ser usado para continuar especificando sinalizadores de parâmetros opcionais.
flags podem ser qualquer combinação dos seguintes flags (combinados com o operador OR bit a bit | ):
PREG_SPLIT_NO_EMPTY
Se este sinalizador estiver definido, preg_split() retornará apenas componentes não vazios.
PREG_SPLIT_DELIM_CAPTURE
Se esse sinalizador for definido, as expressões de colchetes em padrões delimitadores também serão capturadas e retornadas. Esta tag foi adicionada no PHP 4.0.5.
PREG_SPLIT_OFFSET_CAPTURE
Se este sinalizador for definido, o deslocamento da string associado de cada ocorrência do resultado correspondente também será retornado. Observe que isso altera o valor do array retornado para que cada célula também seja um array, onde o primeiro item é a string correspondente e o segundo item é seu deslocamento dentro do assunto. Esta tag está disponível desde o PHP 4.3.0.
Dica: Se você não precisa do poder das expressões regulares, você pode optar por usar alternativas mais rápidas (e mais simples), como explode() ou str_split().