Âncoras Regex

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 Pem 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 Pna 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 Pno 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 msinalizador 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 thissinalizador 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 msinalizador 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 mbandeira instrui essas âncoras a corresponderem no início e no final da linha.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *