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 40
apó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 A
se houver B
antes 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 A
se 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)A
corresponde a A somente se houver B antes dele. - Um lookbehind negativo
(?<!B)A
corresponde a A somente se não houver nenhum elemento antes dele.