+ All Categories
Home > Education > Treinamento PHP: Strings & Patterns

Treinamento PHP: Strings & Patterns

Date post: 05-Jul-2015
Category:
Upload: ari-stopassola-junior
View: 638 times
Download: 5 times
Share this document with a friend
30
Treinamento em PHP Strings & Patterns Ari Stopassola Junior [email protected]
Transcript
Page 1: Treinamento PHP: Strings & Patterns

Treinamento em PHP

Strings & Patterns

Ari Stopassola [email protected]

Page 2: Treinamento PHP: Strings & Patterns

Fundamentos• Encapsulados em aspas simples:

– Representam strings simples– De uso literal

• Encapsulado em aspas duplas:– Trata como strings complexas– Permite escape e substituição de variáveis

Ex.:$who = "World";echo "Hello $who\n"; //Exibe "Hello World" seguido de nova linhaecho 'Hello $who\n'; //Exibe "Hello $who\n"

Page 3: Treinamento PHP: Strings & Patterns

Notações de caracteres

• echo "\x23";– Quando iniciada com x indica uma expressão

em hexadecimal

• echo "\043";– Ao iniciar com 0 (zero) representa um número

octal

Tabela extraída de:http://www.tableascii.com

Page 4: Treinamento PHP: Strings & Patterns

Interpolação

$me = 'Davey';

$names = array ('Smith', 'Jones', 'Jackson');

echo "There cannot be more than two {$me}s!";

echo "Citation: {$names[1]}[1987]";

Sem o uso das chaves (braces) o parser não reconheceria o $mes (só existe o $me).

O $names[1][1987] seria substituído pelo conteúdo do array no índice [1][1987], dependendo do parser*

Page 5: Treinamento PHP: Strings & Patterns

Sintaxe Heredoc• Processa strings complexas

• Utiliza um conjunto de tokens para delimitar a string

• Inicia com o operador especial <<< seguido pelo token e ⏎

• Termina com o próprio token com ; (opcional) e ⏎

• Útil para tratar grandes porções de strings contendo aspas duplas (sem a necessidade de escapar)

Page 6: Treinamento PHP: Strings & Patterns

Sintaxe Heredoc

• Ex.: $who = "World";echo <<<TEXTSo I said, "Hello $who"TEXT;

Lembre-se que o ⏎ (enter) após o token não é exibido. Inclusive, ele é imprescindível na construção dessa sintaxe.

O uso dessa construção é

irrestrito, exceto na inicialização de um atributo de uma classe.

Page 7: Treinamento PHP: Strings & Patterns

Escape de caracteres literais• Ao usar as aspas simples como delimitador da

string, então a própria ‘ deve sofrer o escape (quando exibi-la)

Ex.: echo ’This is \’my\’ string’;• O mesmo acontece com as aspas duplas “• As chaves não exigem escape, mas então

como apresentar {$ ?

Ex.: echo "Here’s a literal brace + dollar sign: {\$";• Heredoc não requer escape quando houver

aspas simples e duplas

Page 8: Treinamento PHP: Strings & Patterns

Transliteração• strtr - troca caracteres por outros:

echo strtr(‘abc’, ‘a’, ‘1’); //mostra 1bc

//suporta substituições múltiplas, através de array

$subst = array(

"1" => "UM",

"2" => "DOIS",

);

echo strtr('1234', $subst); //mostra UMDOIS34

Page 9: Treinamento PHP: Strings & Patterns

strlen

• Obtém o tamanho da string, inclusive contando os espaços

Usando strings como arrays:$var = "Ari";

echo $var[1];

/* mostra “r” pois o índice é zero-based: o primeiro caracter é associado ao [0], o segundo em [1] e assim sucessivamente.*/

Page 10: Treinamento PHP: Strings & Patterns

Comparações$v = "123Ari";

if ($v == 123){

echo ”É igual”;

}• Esse teste, espantosamente, retorna TRUE. PHP

faz um type casting automático da string $v convertendo-a para número.

• O mais indicado seria utilizar o exatamente === OU as funções específicas de comparação de strings:– strcmp– strcasecmp

Page 11: Treinamento PHP: Strings & Patterns

Busca em strings

• Na nomenclatura usa-se os termos:– Needle – porção que se deseja encontrar– Haystack – string que supostamente contém o

needle. Numa tradução ao pé-da-letra seria literalmente localizar uma “agulha num palheiro”.

• A forma simples de pesquisa (e mais rápida) é feita através da família de funções str****.

Page 12: Treinamento PHP: Strings & Patterns

$haystack = "abcdefg";

$needle = "abc";

if(strpos($haystack, $needle) !== false){

echo "Encontrou";

}

//strpos retorna a posição onde o needle se encontra (da esquerda pra direita) no haystack. Observe que “abc” aparece logo na primeira posição, portanto o índice é zero. Daí o uso do !== pois o 0 seria interpretado como false, via o type casting automático.

Page 13: Treinamento PHP: Strings & Patterns

Variantes das funçõesBusca case-insensitive

echo stripos("Hello World", "hello");

//Encontra e mostra a posição zero

echo stristr("Hello My World", "my");

//Exibe "My World”

Faz uma busca reversa - do fim pro início

echo strrpos("123123", "123"); //Mostra 3

Page 14: Treinamento PHP: Strings & Patterns

SubstituiçõesSubstitui todas as ocorrências que encontrar:

• echo str_replace(“World”, “Reader”, “Hello World”);• echo str_ireplace(“world”, “Reader”, “Hello World”);

//ambos devolvem Hello Reader

Obs.: permite um quarto parâmetro que guarda o número de trocas efetuadas.

Suportam também substituições simultâneas:

echo str_replace(array("Hello", "World"), array("Bonjour", "Monde"), "Hello World"); //mostra Bonjour Monde

echo str_replace(array("Hello", "World"), "Bye", "Hello World"); //mostra Bye Bye

Page 15: Treinamento PHP: Strings & Patterns

Substituições (continuação)

echo substr_replace(“Hello World”, “Reader”, 6);

//substitui o conteúdo da posição 6 em diante

Aceita um quarto argumento que delimita a substituição. Ex.:

echo substr_replace("Canned tomatoes are good", "potatoes", 7, 8);

posição 6 (zero-based)

Inicia na posição 7 e avança 8 caracteres

Page 16: Treinamento PHP: Strings & Patterns

Extração• substr aceita 3 parâmetros: a string na qual estamos

executando a operação, posição inicial e comprimento (opcional).

Obs.: a posição inicial pode ser um inteiro positivo (começando do início) ou negativo (começando pelo fim).

Ex.:

$x = "1234567";

echo substr($x, 0, 3); //123

echo substr($x, 1, 1); //2

echo substr($x, -2); //67

echo substr($x, 1); //234567

echo substr($x, -2, 1); //6

Page 17: Treinamento PHP: Strings & Patterns

Formataçãonumber_format

• 1 argumento: sem decimais (arredonda) e separa com , cada grupo de mil. Ex.:

echo number_format("121000000.682");

//121,000,001

• 2 argumentos: separa o decimal com um . de acordo com as casas definidas

echo number_format("121000000.682", 4);

//121,000,000.6820• 4 argumentos: define o separador para os decimais e aos

agrupamentos de mil em mil

echo number_format("121000000.682", 4, "#", "@");

//121@000@000#6820

Page 18: Treinamento PHP: Strings & Patterns

Formatação de valoressetlocale(LC_MONETARY, 'pt_br');

echo money_format("%.2n", "1234.414"); //1.234,41 R$

setlocale(LC_MONETARY, ’en_US');

echo money_format("%.2n", "1234.414"); //$1,234.41

setlocale(LC_MONETARY, 'fr_FR');

echo money_format("%.2n", "1234.414"); //1 234,41 Eu

.2 representa a precisão decimal

setlocale(LC_MONETARY, 'pt_br');

echo money_format(”%i", "1234.414"); //1.234,41 BRL

i representa a notação internacional

Page 19: Treinamento PHP: Strings & Patterns

Formatação genérica$n = 123;

$f = 123.45;

printf ("%b olá %o", $n, $f); //1111011 olá 173

Cada especificação de conversão consiste no sinal de % seguido de um ou mais elementos descritos abaixo (seguindo a respectiva ordem)*:– Sinal– Padding– Alinhamento

– Lagura

– Precisão

– Tipo (veja a lista de tipos disponíveis no slide seguinte)

binário octal

* http://pt.php.net/manual/en/function.sprintf.php

Page 20: Treinamento PHP: Strings & Patterns

Formatação genérica6.Tipo

b Exibe o número inteiro como binário

c Exibe em formato ASCII

d Exibe em número decimal

e ou E Notação científica. Ex.: 1.2e+2 ou 1.2E+2

u Número decimal sem sinal

f Número com ponto flutuante

F Ponto flutuante sem influência do setlocale

o Representa em formato octal

s Mostra no formato de string

x ou X Mostra em hexadecimal (minúsculas ou maiúsculas)

Page 21: Treinamento PHP: Strings & Patterns

Expressões regulares• Representa um padrão (pattern)• Abstração de formato em símbolos• Método formal de representação• Regras• Metacaracteres que casam (match) num padrão• Compara esse padrão a outra string• Funções que manipulam as ocorrências, que se

utilizam de Expressões Regulares• Conhecidas também como: regexp, regex, RE e

ER

Page 22: Treinamento PHP: Strings & Patterns

Expressões regulares

POSIX– ereg– ereg_replace– split

Perl Compatible Regular Expression (PCRE)– preg_match– preg_replace– preg_split

Para ignorar a diferença entremaiúsculas e minúsculas usa-seo próprio nome da função. Ex.:eregieregi_replacespliti

Padrão adotadona ZCE

Page 23: Treinamento PHP: Strings & Patterns

Perl-compatible Regular Expressions• Comumente chamadas de PCRE• Poderoso mecanismo de busca e substituição• Inspirada na sintaxe e semântica do Perl• Adotada como padrão (ao invés do POSIX)• Formato exigido no exame ZCE• Começa e termina por delimitadores,

convencionados pela barra. Ex.: /padrão/

Obs.: o delimitador pode ser qualquer caracter, desde que ele não apareça com frequência. Nesse caso terá de ser escapado.

Page 24: Treinamento PHP: Strings & Patterns

Metacaracteres PCREMetacaracter Equivalência

\d Número de 0-9

\D Tudo exceto números

\w Qualquer alfanumérico e _ (underscore)

\W Tudo exceto alfanumérico e _

\s Qualquer espaço, tabulação e nova linha

\S Tudo exceto espaço, tabulação e nova linha

. Tudo exceto nova linha

ˆ Compara no início da string

$ Compara no fim da string

Page 25: Treinamento PHP: Strings & Patterns

Quantificadores PCRE

Quantificadores Significado

? Ocorre 0 ou 1 vez

* Ocorre 0 ou várias vezes

+ Ocorre 1 ou várias vezes

{,n} Ocorre até (no máximo) n vezes

{m,} Ocorre m ou mais vezes

{m,n} Ocorre entre m e n vezes

/ab?c/ faz o match com ac e abc, pois ? permite que o b apareça ou não/ab{1,3}c/ identifica abc, abbc e abbbc

Page 26: Treinamento PHP: Strings & Patterns

• A expressão deve estar entre barras (delimitadores)Ex.: /ab[cd]e/

Identifica “abce” ou “abde”. Os colchetes permitem alternativas válidas.

Ex.: /ab[c-e\d]/Detecta abc, abd e abe MAIS um dígito qualquer (\d)

Detecção:preg_match_all($regexp, $string, $ocorrencias);

Substituição:preg_replace($regexp, $por, $string);

Exemplo de expressões regulares

Page 27: Treinamento PHP: Strings & Patterns

Sub-expressões• São expressões regulares combinadas

formando uma expressão maior e mais complexa.

• Usa-se parênteses e é possível capturar essa equiparação, quando ocorrer, de forma individualizada

Ex.: /a(bc.)+e/

Essa expressão busca a letra a, seguida bc mais um caracter, e que essa sub-expressão repita uma ou mais vezes (+), seguida de e

Page 28: Treinamento PHP: Strings & Patterns

Checagem e Extração

$regex = "#^(\w+)\s(\w+)#";

$matches = array();

if(preg_match($regex, “Ari Junior”, $matches)){

var_dump($matches);

}

Delimitador não usual

Cada sub-pattern é associado a um índice de $matches, começando em 1.

Page 29: Treinamento PHP: Strings & Patterns

Substituições

$body = "[b]Make Me Bold![/b]";

$regex = "@\[b\](.*?)\[/b\]@i";

$replacement = "<b>$1</b>";

$body = preg_replace($regex, $replacement, $body);

echo $body;

Análise da expressão:\[b\] faz o escape do colchete pois ele tem uma função especial dentro das expressões regulares. Nesse caso, se deseja detectá-lo literalmente.

$1 é substituído pela primeira sub-expressão (.*?)

i é um modificador e transformao padrão em case-insensitive.Consulte os demais em php.net*

* http://pt.php.net/manual/en/reference.pcre.pattern.modifiers.php

Page 30: Treinamento PHP: Strings & Patterns

Críticas, sugestões e idéiasE-mail: [email protected]

MSN: [email protected]

Skype: stopassola

Google Talk: [email protected]

Redes sociais:

http://www.orkut.com/Main#Profile?rl=mp&uid=15132509634963996685

http://www.facebook.com/arijunior

http://twitter.com/stopassola

http://pt.linkedin.com/in/stopassola


Recommended