[ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.03.13
Prihlásený: 09.04.18
Príspevky: 112
Témy: 39 | 39
NapísalOffline : 05.11.2017 19:57 | Regularny vyraz

Zdravim, vytvoril som si regularny na zistovanie ci je string ineho formatu ako prepinac cize nema tvar -"nieco". Neviem vsak preco mi tento regular nefunguje, mozno ho mam zle napisany, neviem: [^-][a-z0-9]+
Zde kod...
Kód:
bool checkRegular(char* regularexp, char* argv){
   regex_t regex;
   int reti;

               
   reti = regcomp(&regex, regularexp, 0);
   if (reti) {
      fprintf(stderr, "Could not compile regex\n");
      exit(1);
   }
   
    reti = regexec(&regex, argv, 0, NULL, 0);
      if (!reti) {
          printf("Match: %s\n",argv);
          return true;
   } else return false;
}


A tu z mainu
Kód:
if( checkRegular( "[^-][a-z0-9]+",argv[i]) || checkRegular("[^-][a-z0-9]+",argv[j]) ) continue;

Dakujem


Offline

Užívateľ
Užívateľ
Regularny vyraz

Registrovaný: 19.05.08
Prihlásený: 26.01.21
Príspevky: 656
Témy: 27 | 27
Bydlisko: Slovensko
NapísalOffline : 05.11.2017 20:17 | Regularny vyraz

vyskusaj si, testerov je vela https://regexr.com/
Nechcel si skor nieco ako "-.+"?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.03.13
Prihlásený: 09.04.18
Príspevky: 112
Témy: 39 | 39
Napísal autor témyOffline : 05.11.2017 22:38 | Regularny vyraz

ono mne je jedno ci bude mat regularny tvar -"nieco" alebo vsetko okrem -"nieco" to by som len vymenil kedy vracat true/false lenze mi to neide, skusal som aj tvoj regulak a vymenit vo funkci true/false a hoci by mi malo do IF hodit oba hodnoty ako false aj tak mi ten IF presiel a nechapem preco, vo funkciach chyby nevidim :/ . Nemam niekde chybu v tej funkcii checkRegular?

EDIT: skusil som si vypisovat kedy to prejde a kedy nie a aj pri pouziti -.+ mi neda ako zhodu napriklad s -a alebo -m. Nebude naozaj chybav tej funkcii? bohuzial ja ju uz vyse hodiny nemozem najst ak tam niekde je :cry:


Offline

Užívateľ
Užívateľ
Regularny vyraz

Registrovaný: 07.04.12
Prihlásený: 27.01.21
Príspevky: 908
Témy: 54 | 54
NapísalOffline : 05.11.2017 23:51 | Regularny vyraz

([-][aA-zZ]*)\w+
Či rozumiem správne, čo sa snažíš vyhľadať, každopádne vracia to true, ak string obsahuje "-text". Napr. pri tomto to označí 1. a 3. "-ano nie -ano"


_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 06.11.2017 7:51 | Regularny vyraz

V tomto prípade by som skôr videl problém v tom, že nemáš kotvu na začiatok. Ak napíšeš [^-][a-z0-9]+, tak v texte "-nieco" sa ti to chytí na všetky podreťazce, ktoré nezačínajú na mínus. Takže na ni, nie, niec, nieco, ie, iec, ieco atď...
Keď ale použiješ kotvu na začatok, väčšinou je to ^ (značí, že string sa musí začínať na daný výraz), tak ti to bude fungovať.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.03.13
Prihlásený: 09.04.18
Príspevky: 112
Témy: 39 | 39
Napísal autor témyOffline : 11.11.2017 23:37 | Regularny vyraz

Kód:
bool checkRegular(char* regularexp, char* argv){
   regex_t regex;
   int reti;

               
   reti = regcomp(&regex, regularexp, 0);
   if (reti) {
      fprintf(stderr, "Could not compile regex\n");
      exit(1);
   }
   
    reti = regexec(&regex, argv, 0, NULL, 0);
   if (reti == 0) {
       printf("Match: %s\n",argv);
       return false;

   } else {
      printf("no Match: %s \n",argv);
      return true;
   }
   regfree(&regex);
}


s regex ([-][aA-zZ]*)\w+ (upravene na ([-][aA-zZ]*)[a-zA-Z0-9]+) lebo s \w hadzalo error pri kompilacii
Terminal:
Kód:
no Match: 077
no Match: -s
no Match: -m


s regex [^-][a-z0-9]+
Terminal:
Kód:
no Match: 077
no Match: -s
no Match: -m


s regex ^[^-][a-z0-9]+
Kód:
no Match: 077
no Match: -s
no Match: -m


..urcite neni chyba vo funkcii?


Offline

Užívateľ
Užívateľ
Regularny vyraz

Registrovaný: 07.04.12
Prihlásený: 27.01.21
Príspevky: 908
Témy: 54 | 54
NapísalOffline : 12.11.2017 9:19 | Regularny vyraz

Tak sem postni celý kód, regex asi nebude klasickou C knižnicou. Tým myslím aspoň main a headers súbory/includy.


_________________
Notebook: Dell Inspiron 15-7537= i5-4200U|nVidia GT 750M 2GB|RAM 6GB|250GB Samsung 850 EVO|W8.1|Cooler Master NotePal U3
Pc: Asus Rog Strix B360-G | i7-8700 | MSI 1080 Gaming X | Crucial Ballistix 16GB 2666MHz Dual Ranked | Samsung 970 Evo | Crucial MX500 | WD Red | Fera 3 | Arctic F12 Silent | Seasonic Focus Plus 650W Gold | Fractal Design Mini C TG
Disk: Western Digital Elements 1TB USB 2.0; Seagate Expansion 2TB USB 3.0
Príslušenstvo: A4tech Bloody V3 V-Track Core 3 + A4tech Bloody B-070; A4tech Bloody B120; A4tech Bloody G501; ATH-M40x; MSI Clutch M40
Monitor: Dell U2515H
Mobil: Xiaomi Redmi Note 3 Special Edition
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.03.13
Prihlásený: 09.04.18
Príspevky: 112
Témy: 39 | 39
Napísal autor témyOffline : 12.11.2017 10:32 | Regularny vyraz

Kód:
#include <fcntl.h>         
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <getopt.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
#include <stdbool.h>

bool checkRegular(char* regularexp, char* argv){
   regex_t regex;
   int reti;

   printf("regex: %s", regularexp);            
   reti = regcomp(&regex, regularexp, 0);
   if (reti) {
      fprintf(stderr, "Could not compile regex\n");
      exit(1);
   }

   
   
     reti = regexec(&regex, argv, 0, NULL, 0);
   if (reti == 0) {
          printf("Match: %s\n",argv);
          return false;

   } else {
      printf("no Match: %s \n",argv);
      return true;
   }
   regfree(&regex);
}

int main(int argc, char *argv[]){
        for (int i = 1; i < argc-2; ++i){
          checkRegular("([-][aA-zZ]*)[a-zA-Z0-9]+)",argv[i]);
      }

        return 0;
}


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3
NapísalOffline : 12.11.2017 16:57 | Regularny vyraz

Ak je problém vo funkcií, tak použi túto z dokumentácie http://pubs.opengroup.org/onlinepubs/009695399/functions/regcomp.html#tag_03_603_06

Tiež si pozri toto http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html
Z toho si nie som úplne istý, či bude táto bežná sytax fungovať - viď množiny :digit:, :alnum: apod. Skús použiť tie.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.03.13
Prihlásený: 09.04.18
Príspevky: 112
Témy: 39 | 39
Napísal autor témyOffline : 12.11.2017 18:22 | Regularny vyraz

Uz som sa na to vybodol, riesim to tak ze cez if skontrolujem len ci je na zaciatku stringu pomlcka, ak je vrati true v opacnom pripade false. Jednoduche a funkcne


 [ Príspevkov: 10 ] 


Regularny vyraz



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Regularny vyraz....

v PHP, ASP

6

403

19.07.2008 16:25

fotograf

V tomto fóre nie sú ďalšie neprečítané témy.

regularny vyraz

v PHP, ASP

6

364

27.02.2012 14:28

emer

V tomto fóre nie sú ďalšie neprečítané témy.

Regularny vyraz

v JavaScript, VBScript, Ajax

3

370

25.09.2010 2:58

Dolmayan

V tomto fóre nie sú ďalšie neprečítané témy.

Regulárny výraz

v PHP, ASP

2

281

04.01.2012 0:54

1daemon1

V tomto fóre nie sú ďalšie neprečítané témy.

Regulárny výraz \.

v JavaScript, VBScript, Ajax

4

326

09.09.2011 19:08

camo

V tomto fóre nie sú ďalšie neprečítané témy.

regularny vyraz upravenie

v PHP, ASP

2

292

11.06.2010 20:05

dartanan

V tomto fóre nie sú ďalšie neprečítané témy.

Ako na regularny vyraz

v PHP, ASP

2

864

22.05.2009 21:25

roach189

V tomto fóre nie sú ďalšie neprečítané témy.

Ako spravne zapisat regularny vyraz

v Internetový marketing, SEO, reklama

4

787

06.10.2008 13:22

Codik

V tomto fóre nie sú ďalšie neprečítané témy.

Update stĺpca char cez regulárny výraz

v Databázy

2

536

29.10.2011 16:40

camo

V tomto fóre nie sú ďalšie neprečítané témy.

Reg. vyraz pre html adresu

v PHP, ASP

5

563

11.10.2009 21:06

Blackshadow



© 2005 - 2021 PCforum, edited by JanoF