Referências anteriores de Regex

Resumo : neste tutorial, você aprenderá como usar as referências anteriores de regex e suas aplicações práticas.

Introdução às referências anteriores de Regex

Ao construir uma expressão regular , você pode colocar \ndentro do padrão. Neste caso, \né uma referência anterior de um número de grupo de capturan .

Exemplos de referência anterior de Regex

Vejamos alguns exemplos de uso de referências anteriores de regex.

1) Usando referências anteriores de regex para remover palavras duplicadas no texto

Suponha que você tenha um texto com algumas palavras duplicadas. Por exemplo:

$str = "It's the the PHP 8.0";Linguagem de código:  PHP  ( php )

Neste exemplo, a palavra 'the'é duplicada no texto.

Para detectar a palavra duplicada, você pode usar a seguinte expressão regular:

'/\b(\w+)\s+\1\b/'Linguagem de código:  PHP  ( php )

Nesta expressão regular:

  • \bcorresponde ao limite da palavra .
  • (\w+)corresponde a um ou mais caracteres de palavra. É também um grupo de captura com o número 1.
  • \s+corresponde a um ou mais espaços em branco, incluindo espaços.
  • \1é uma referência anterior que faz referência ao grupo de captura 1.

Aqui está o código completo:

<?php

$str = "It's the the PHP 8.0";
$pattern = '/\b(\w+)\s+\1\b/';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches);
}Linguagem de código:  PHP  ( php )

Saída:

Array
(
    [0] => the the
    [1] => the
)Linguagem de código:  PHP  ( php )

2) Usando referências anteriores de regex para corresponder ao texto entre aspas simples e duplas

Suponha que você precise colocar o texto entre aspas duplas ( "), por exemplo:

"text here"Linguagem de código:  PHP  ( php )

ou aspas simples:

'text here'Linguagem de código:  PHP  ( php )

Mas não misturado entre aspas duplas e simples como esta:

'will not match."Linguagem de código:  PHP  ( php )

Para fazer isso, você pode usar as referências anteriores conforme mostrado na seguinte expressão regular:

'/([\'"])(.*?)\1/'Linguagem de código:  PHP  ( php )

Nesta expressão regular:

  • Corresponde a [\'"]qualquer texto que comece com aspas simples ou duplas. Como usamos uma string entre aspas simples, precisamos escapá-la usando a barra invertida ( \).
  • O ([\'"])cria o primeiro grupo de captura com número de grupo 1.
  • O (.*?)cria o segundo grupo de captura que não é ganancioso, que corresponde ao menor número possível de caracteres (exceto a nova linha).
  • A \1é uma referência anterior que faz referência ao primeiro grupo de captura.

Aqui está o código completo:

<?php

$messages = [
    'They said: "PHP is awesome"',
    "They said: 'PHP is awesome'",
    'They said: "PHP\'s awesome"'
];

$pattern = '/([\'"])(.*?)\1/';

foreach ($messages as $message) {
    if (preg_match($pattern, $message, $matches)) {
        echo $matches[0] . PHP_EOL;
    }
}Linguagem de código:  PHP  ( php )

Saída:

"PHP is awesome"
'PHP is awesome'
"PHP's awesome"Linguagem de código:  PHP  ( php )

Resumo

  • O \nno padrão é uma referência anterior que faz referência ao grupo de captura n, onde né um número inteiro maior que zero.

Deixe um comentário

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