bom galera nesse tutorial vou ensinar o basico de regex em c, se voce usa o sistema windows vai ter q baixar as bibliotecas e libs
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
nao vou ensinar como instalar no windows mais e bem facil baixe o executavel e depois configure na opções da sua IDE, nao se esqueça de linkar -l regex, no linux costuma ja vim com elas entao so criar seu codigo ^^ , para começar vamos criar uma source basica tambem declarar a biblioteca regex.h
criamos uma variavel do tipo regex_t, usamos a funçao regcomp para criar a regex passamos como argumento o endereço de memoria da variavel regex_t, a nossa regex, numero 0
agora vou criar uma string onde a regex vai fazer a pesquisa
usamos a funçao regexec passamos como argumento o endereço da variavel regex_t a string q vai ser pesquisada, o numero 0, NULL e o numero 0 denovo
no caso desse exemplo vamos saber se a regex tem na string, usamos a condiçao if com uma negaçao com a funçao regexec
para terminar usamos a funçao regfree para liberar a regex e passamos como argumento para ela o endereço da variavel regex_t
compilamos e executamos ^^ , agora vamos aprender a recorta uma parte do texto para isso vamos usar uma pequena gambiarra aq '-', na funçao regcomp onde e numero 0 usamos a constante REG_EXTENDED
agora criamos uma estrutura do tipo regmatch_t e atribuimos o endereço de memoria dela para funçao regexec no lugar de NULL, e o primeiro 0 colocamos o numero 1
a estrutura regmatch_t tem dois atributos q sao rm_so e rm_eo, o atributo rm_so aponta para começo da nossa regex e o rm_eo para o final
para agente ler da nossa regex para frente basta somar a string ao atributo no caso somando ela ao rm_so ele vai ler a regex e o rm_eo vai ler depois dela
para agente recortar apenas a parte da regex usamos a funçao strncpy da biblioteca string.h q limita a quantidade de caracter copiado (excelente funçao para evitar bunffer overflow), mais ante precisamos criar uma string para receber depois passamos como argumento para funçao strncpy a nova string, a string somada ao atributo rm_so, e rm_eo subtraido pelo rm_so
so para evitar bunffer do final da string temos q colocar 0x00 para isso atribuimos ela na posiçao da variavel [rm.rm_eo - rm.rm_so]
bom galera comparado com algumas linguagem o regex do c e um pouco mais complicado =/
by hacker fts315
[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
nao vou ensinar como instalar no windows mais e bem facil baixe o executavel e depois configure na opções da sua IDE, nao se esqueça de linkar -l regex, no linux costuma ja vim com elas entao so criar seu codigo ^^ , para começar vamos criar uma source basica tambem declarar a biblioteca regex.h
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
}
criamos uma variavel do tipo regex_t, usamos a funçao regcomp para criar a regex passamos como argumento o endereço de memoria da variavel regex_t, a nossa regex, numero 0
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
regex_t r;
regcomp(&r,"hacker",0);
}
agora vou criar uma string onde a regex vai fazer a pesquisa
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regcomp(&r,"hacker",0);
}
usamos a funçao regexec passamos como argumento o endereço da variavel regex_t a string q vai ser pesquisada, o numero 0, NULL e o numero 0 denovo
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regcomp(&r,"hacker",0);
regexec(&r,fts,0,NULL,0);
}
no caso desse exemplo vamos saber se a regex tem na string, usamos a condiçao if com uma negaçao com a funçao regexec
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regcomp(&r,"hacker",0);
if(!(regexec(&r,fts,0,NULL,0)))
{
printf("sim - regex bate");
}
else
{
printf("nao - regex nao bate");
}
}
para terminar usamos a funçao regfree para liberar a regex e passamos como argumento para ela o endereço da variavel regex_t
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regcomp(&r,"hacker",0);
if(!(regexec(&r,fts,0,NULL,0)))
{
printf("sim - regex bate");
}
else
{
printf("nao - regex nao bate");
}
regfree(&r);
}
compilamos e executamos ^^ , agora vamos aprender a recorta uma parte do texto para isso vamos usar uma pequena gambiarra aq '-', na funçao regcomp onde e numero 0 usamos a constante REG_EXTENDED
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regcomp(&r,"hacker",REG_EXTENDED);
regexec(&r,fts,0,NULL,0);
regfree(&r);
}
agora criamos uma estrutura do tipo regmatch_t e atribuimos o endereço de memoria dela para funçao regexec no lugar de NULL, e o primeiro 0 colocamos o numero 1
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regmath_t rm;
regcomp(&r,"hacker",REG_EXTENDED);
regexec(&r,fts,1,&rm,0);
regfree(&r);
}
a estrutura regmatch_t tem dois atributos q sao rm_so e rm_eo, o atributo rm_so aponta para começo da nossa regex e o rm_eo para o final
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regmatch_t rm;
regcomp(&r,"hacker",REG_EXTENDED);
regexec(&r,fts,1,&rm,0);
printf("comeco: %d\n",rm.rm_so);
printf("fim: %d",rm.rm_eo);
regfree(&r);
}
para agente ler da nossa regex para frente basta somar a string ao atributo no caso somando ela ao rm_so ele vai ler a regex e o rm_eo vai ler depois dela
- Código:
#include <stdio.h>
#include <regex.h>
int main(void)
{
char fts[100] = "by hacker fts315";
regex_t r;
regmatch_t rm;
regcomp(&r,"hacker",REG_EXTENDED);
regexec(&r,fts,1,&rm,0);
printf("comeco: %s\n",fts + rm.rm_so);
printf("fim: %s",fts + rm.rm_eo);
regfree(&r);
}
para agente recortar apenas a parte da regex usamos a funçao strncpy da biblioteca string.h q limita a quantidade de caracter copiado (excelente funçao para evitar bunffer overflow), mais ante precisamos criar uma string para receber depois passamos como argumento para funçao strncpy a nova string, a string somada ao atributo rm_so, e rm_eo subtraido pelo rm_so
- Código:
#include <stdio.h>
#include <regex.h>
#include <string.h>
int main(void)
{
char fts[100] = "by hacker fts315";
char hack[100];
regex_t r;
regmatch_t rm;
regcomp(&r,"hacker",REG_EXTENDED);
regexec(&r,fts,1,&rm,0);
strncpy(hack,fts + rm.rm_so, rm.rm_eo - rm.rm_so);
regfree(&r);
}
so para evitar bunffer do final da string temos q colocar 0x00 para isso atribuimos ela na posiçao da variavel [rm.rm_eo - rm.rm_so]
- Código:
#include <stdio.h>
#include <regex.h>
#include <string.h>
int main(void)
{
char fts[100] = "by hacker fts315";
char hack[100];
regex_t r;
regmatch_t rm;
regcomp(&r,"hac.*ker",REG_EXTENDED);
regexec(&r,fts,1,&rm,0);
strncpy(hack,fts + rm.rm_so, rm.rm_eo - rm.rm_so);
hack[rm.rm_eo - rm.rm_so] = 0x00;
printf("%s",hack);
regfree(&r);
}
bom galera comparado com algumas linguagem o regex do c e um pouco mais complicado =/
by hacker fts315