Resumo : neste tutorial, você aprenderá como usar as âncoras regex para corresponder ao início e ao fim de uma string.
Introdução às âncoras regex
Ao contrário das classes de caracteres , as âncoras regex não correspondem a caracteres, mas a uma posição antes ou depois dos caracteres:
^
: A âncora circunflexa (^
) corresponde ao início de uma string.$
: a âncora do dólar ($
) corresponde ao final de uma string.
O exemplo a seguir usa uma expressão regular que corresponde a qualquer caractere P
em uma string:
<?php
$pattern = '/P/';
$str = 'PHP';
if (preg_match_all($pattern, $str, $matches)) {
print_r($matches[0]);
}
Linguagem de código: PHP ( php )
Ele retorna dois caracteres P
na string PHP
:
Array
(
[0] => P
[1] => P
)
Linguagem de código: PHP ( php )
No entanto, se você adicionar a âncora circunflexa ( ^
) à expressão regular, ela corresponderá apenas à letra P
no início da string:
<?php
$pattern = '/^P/';
$str = 'PHP';
if (preg_match_all($pattern, $str, $matches)) {
print_r($matches[0]);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => P
)
Linguagem de código: PHP ( php )
O exemplo a seguir usa a âncora cifrão ( $
) para corresponder a um número no final de uma string:
<?php
$pattern = '/\d$/';
$str = 'PHP 8';
if (preg_match_all($pattern, $str, $matches)) {
print_r($matches[0]);
}
Linguagem de código: PHP ( php )
Ele retorna o número 8 conforme esperado:
Array
(
[0] => 8
)
Linguagem de código: PHP ( php )
A expressão regular a seguir usa as âncoras circunflexo ( ^
) e dólar ( $
) para corresponder uma sequência de tempo ao formato hh:mm
:
<?php
$pattern = '/^\d\d:\d\d$/';
$message = '12:15';
if (preg_match_all($pattern, $message, $matches)) {
print_r($matches[0]);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 12:15
)
Linguagem de código: PHP ( php )
Âncora Regex e modo multilinha
Por padrão, o cursor ^
e $
as âncoras tratam uma string como uma única linha de caractere, mesmo que a string contenha caracteres de nova linha. Por exemplo:
<?php
$pattern = '/^\d/';
$message = <<<'text'
1. First item
2. Second item
3. Third item
text;
if (preg_match_all($pattern, $message, $matches)) {
print_r($matches[0]);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 1
)
Linguagem de código: PHP ( php )
Neste exemplo, a expressão regular "/^\d/"
corresponde a um dígito no início de uma string. Ele retorna o número 1 conforme o esperado.
Em alguns casos, você pode querer corresponder um dígito no início da linha, e não apenas no início da string.
Para fazer isso, você adiciona o m
sinalizador no final da expressão regular assim:
<?php
$pattern = '/^\d/m';
$message = <<<'text'
1. First item
2. Second item
3. Third item
text;
if (preg_match_all($pattern, $message, $matches)) {
print_r($matches[0]);
}
Linguagem de código: PHP ( php )
Saída:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Linguagem de código: PHP ( php )
O m' flag stands for multiline. When this
sinalizador m’ está definido, as âncoras circunflexo ( ^
) e dólar ( $
) corresponderão ao início e ao final de cada linha na string.
Observe que se uma string não tiver novas linhas, o m
sinalizador não terá efeito.
Resumo
- A âncora circunflexa (
^
) corresponde ao início de uma string. - A âncora de dólar (
$
) corresponde ao final de uma string. - A
m
bandeira instrui essas âncoras a corresponderem no início e no final da linha.