Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ 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
Príspevok NapísalOffline : 05.11.2017 19:57

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ý: 23.04.24
Príspevky: 664
Témy: 28
Bydlisko: Slovensko
Príspevok NapísalOffline : 05.11.2017 20:17

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
Príspevok Napísal autor témyOffline : 05.11.2017 22:38

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ý: 02.06.21
Príspevky: 907
Témy: 54
Príspevok NapísalOffline : 05.11.2017 23:51

([-][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
Príspevok NapísalOffline : 06.11.2017 7:51

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
Príspevok Napísal autor témyOffline : 11.11.2017 23:37

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ý: 02.06.21
Príspevky: 907
Témy: 54
Príspevok NapísalOffline : 12.11.2017 9:19

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
Príspevok Napísal autor témyOffline : 12.11.2017 10:32

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
Príspevok NapísalOffline : 12.11.2017 16:57

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
Príspevok Napísal autor témyOffline : 12.11.2017 18:22

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


Odpovedať na tému [ Príspevkov: 10 ] 


Podobné témy

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

v PHP, ASP

2

366

04.01.2012 0:54

1daemon1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Regulárny výraz \.

v JavaScript, VBScript, Ajax

4

436

09.09.2011 19:08

camo Zobrazenie posledných príspevkov

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

v PHP, ASP

6

522

19.07.2008 16:25

fotograf Zobrazenie posledných príspevkov

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

v PHP, ASP

6

480

27.02.2012 14:28

emer Zobrazenie posledných príspevkov

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

v JavaScript, VBScript, Ajax

3

507

25.09.2010 2:58

Dolmayan Zobrazenie posledných príspevkov

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

v PHP, ASP

2

389

11.06.2010 20:05

dartanan Zobrazenie posledných príspevkov

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

v PHP, ASP

2

971

22.05.2009 21:25

roach189 Zobrazenie posledných príspevkov

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

v Internetový marketing, SEO, reklama

4

929

06.10.2008 13:22

Codik Zobrazenie posledných príspevkov

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

666

29.10.2011 16:40

camo Zobrazenie posledných príspevkov

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

v PHP, ASP

5

730

11.10.2009 21:06

Blackshadow Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra