O símbolo de acento circunflexo dentro de conjuntos em expressões regulares do PHP
Como você sabe, o acento circunflexo dentro de [] cria
uma negação quando escrito no início dos colchetes.
Portanto, é um metacaractere dentro
desses colchetes. Para obter o acento circunflexo como um caractere literal,
é necessário escapá-lo ou removê-lo da
primeira posição.
Exemplo
No exemplo a seguir, o padrão de busca é:
o primeiro caractere é qualquer um exceto 'd',
depois duas letras 'x'.
<?php
$str = 'axx bxx ^xx dxx';
$res = preg_replace('#[^d]xx#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'! ! ! dxx'
Exemplo
Agora o padrão de busca é: o primeiro caractere
é 'd' ou '^', depois duas
letras 'x':
<?php
$str = 'axx bxx ^xx dxx';
$res = preg_replace('#[d^]xx#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'axx bxx ! !'
Exemplo
Você pode não precisar remover o acento circunflexo da primeira posição, mas simplesmente escapá-lo usando a barra invertida, e ele passará a representar a si mesmo:
<?php
$str = 'axx bxx ^xx dxx';
$res = preg_replace('#[\^d]xx#', '!', $str);
?>
Como resultado, o seguinte será armazenado na variável:
'axx bxx ! !'
Problemas práticos
Dada a string:
<?php
$str = '^xx axx ^zz bkk @ss';
?>
Escreva uma expressão regular que encontre strings seguindo o padrão: acento circunflexo ou arroba, e então duas letras latinas.
Dada a string:
<?php
$str = '^xx axx ^zz bkk @ss';
?>
Escreva uma expressão regular que encontre strings seguindo o padrão: NEM acento circunflexo nem arroba, e então duas letras latinas.
Dada a string:
<?php
$str = '^xx axx ^zz bkk';
?>
Escreva uma expressão regular que encontre strings seguindo o padrão: NÃO é acento circunflexo, e então duas letras latinas.