Regex Lookbehind

Resumo : neste tutorial, você aprenderá sobre o lookbehind regex e o lookbehind negativo.

Introdução ao lookbehind de regex

Suponha que você tenha a seguinte string:

'2 chicken cost $40';
Linguagem de código:  JavaScript  ( javascript )

E você deseja combinar o número 40após o $sinal, mas não o número 2. Para fazer isso, você usa um lookbehind. Um lookbehind corresponde a um elemento somente se houver um elemento antes dele.

Assim como o lookahead , o lookbehind tem a seguinte sintaxe:

(?<=B)A

Este padrão corresponde Ase houver Bantes dele.

O exemplo a seguir usa um lookbehind para corresponder a um número que tem o $sinal antes dele:

<?php

$pattern = '/(?<=\$)\d+/';
$str = '2 chicken cost $40';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches);
}Linguagem de código:  HTML, XML  ( xml )

Saída:

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

Na seguinte expressão regular:

'/(?<=\$)\d+/'Linguagem de código:  JavaScript  ( javascript )
  • O (?<=\$)lookbehind que corresponde ao seguinte tem o $sinal. Como $tem um significado especial no padrão, é necessário escapá-lo usando a barra invertida ( \).
  • Corresponde a \d+um número com um ou mais dígitos.

A expressão regular corresponde a um número que tem $antes dela.

Olhar negativo para trás

O lookbehind negativo tem a seguinte sintaxe:

(?<!B)A

Corresponde Ase não B houver antes.

O exemplo a seguir usa um lookbehind negativo para corresponder a um número que não tem o $sinal antes dele:.`

<?php

$pattern = '/(?<!\$)\d+/';
$str = '2 chicken cost $40';

if (preg_match($pattern, $str, $matches)) {
    print_r($matches); // 40

}Linguagem de código:  PHP  ( php )

Saída:

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

Na expressão regular:

'/(?<!\$)\d+/'Linguagem de código:  JavaScript  ( javascript )
  • O (?<!\$)é um lookbehind negativo que não corresponde ao $sinal.
  • Corresponde a \d+um número com um ou mais dígitos.

Resumo

  • Um lookbehind (?<!B)Acorresponde a A somente se houver B antes dele.
  • Um lookbehind negativo (?<!B)Acorresponde a A somente se não houver nenhum elemento antes dele.

Deixe um comentário

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