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 \n
dentro 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:
\b
corresponde 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 captura1
.
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
\n
no padrão é uma referência anterior que faz referência ao grupo de capturan
, onden
é um número inteiro maior que zero.