Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
/**
* Substitui todas as vogais por expressões regulares mais os (ç,Ç),
* para uma busca por palavras com ou sem acento.
*
* @param string $texto
* @param string $banco
* @return string
* @author Wagner B. Soares (soareswagner@hotmail.com)
*/
function RegexpParaBusca($texto,$banco = null)//Trasforma tudo em minuscula
$texto = trim(strtolower($texto));
//Tira espaco entre as palavras
while (strpos($texto," "))
{
$texto = str_replace(" "," ",$texto);
}
$caracteresEspaeciais = array("ã","á","à","â","é","è","ê","í","ì","î","õ","ô","ó","ò","ú","ù","û","ü","ç");
$caracteresLimpos = array("a","a","a","a","e","e","e","i","i","i","o","o","o","o","u","u","u","u","c");
$texto = str_replace($caracteresEspaeciais,$caracteresLimpos,$texto);
$caractereSimples = array("a","e","i","o","u","c");
$caracteresEnvelopados = array("{[a]}","{[e]}","{[i]}","{[o]}","{[u]}","{[c]}");
$texto = str_replace($caractereSimples,$caracteresEnvelopados,$texto);
$inicio = "(";
$fim = ")";
if($banco === "MSSQL")
{
$inicio = "[";
$fim = "]";
}
$caracteresParaRegExp = array(
$inicio."a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã".$fim,
$inicio."e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È".$fim,
$inicio."i|î|í|ì|I|Î|Í|Ì|í|Í|î|Î|ì|Ì".$fim,
$inicio."o|õ|ô|ó|ò|O|Ô|Ó|Ò|Õ|ó|Ó|ô|Ô|ò|Ò|õ|Õ".$fim,
$inicio."U|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù".$fim,
$inicio."c|ç|Ç|ç|Ç".$fim
);
$texto = str_replace($caracteresEnvelopados,$caracteresParaRegExp,$texto);
return $texto;
}
echo RegexpParaBusca("esta é uma função")."<br>";
echo RegexpParaBusca("esta é uma função","MSSQL")."<br>";
echo RegexpParaBusca("esta é uma função")."<br>";Oracle
SELECT testecol
FROM teste
WHERE REGEXP_LIKE(testecol, '(e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È)st(a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã) (e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È) (U|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù)m(a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã) f(U|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù)n(c|ç|Ç|ç|Ç)(a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A
|Á|Â|Å|À|Ã)(o|õ|ô|ó|ò|O|Ô|Ó|Ò|Õ|ó|Ó|ô|Ô|ò|Ò|õ|Õ)', 'i');
MySql
SELECT testecol
FROM teste
WHERE testecol REGEXP '(e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È)st(a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã) (e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È) (U|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù)m(a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã) f(U|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù)n(c|ç|Ç|ç|Ç)(a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A
|Á|Â|Å|À|Ã)(o|õ|ô|ó|ò|O|Ô|Ó|Ò|Õ|ó|Ó|ô|Ô|ò|Ò|õ|Õ)';
MSSql
SELECT testecol
FROM teste
WHERE testecol LIKE '% [e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È]st[a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã] [e|ê|é|è|E|Ê|É|È|é|É|ê|Ê|è|È ] [u|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù]m[a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A|Á|Â|Å|À|Ã] f[u|Û|Ú|Ù|Ü|u|û|ú|ù|ü|ü|ú|Ú|Ü|û|Û|ù|Ù]n[c|ç|Ç|ç|Ç][a|ã|á|à|â|á|â|å|à|ã|Á|Ã|À|Â|A
|Á|Â|Å|À|Ã][o|õ|ô|ó|ò|O|Ô|Ó|Ò|Õ|ó|Ó|ô|Ô|ò|Ò|õ|Õ]%';
Carregando comentários...