Negacia regularneho vyrazu v .net formate

Programovacie jazyky, rady, poradňa...
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

Zdravim,
potreboval by som napisat regularny vyraz v .net (konkretne pre Microsoft NPS Server), ktory vrati pravdivu hodnotu vtedy, ked na vstupe NEBUDE konkretny retazec resp. podretazec znakov.
Cize napriklad na vstupe mi prichadzaju rozne MAC adresy a chcem dosiahnut to, ze ked pride nejaka z tychto konkretnych MAC adries (00-05-9A-3C-78-00, FF-05-9A-3C-79-0C, EF-00-9A-3A-79-0E), bude vysledok vyrazu nepravda, no ked pride na vstup hocijaka ina MAC adresa, bude vysledok vyrazu pravda.

Som programatorska lama, tak sa vopred ospravedlnujem za tuto primitivnu otazku a dakujem za odpoved:)
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa audiotrack »

prečo to chceš riešiť tak zložito, že porovnávať s regulárnymi? To budeš na každú adresu potrebovať jeden výraz. Omnoho jednoduchšie je hodiť si tie adresy do poľa a použiť BinarySearch nech ti overí či tam je, alebo nie je. A samozrejme výsledok teda zneguješ
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

Ahoj, neviem ci som ta pochopil spravne ale take konstrukcie ako pole sa mi v tom NPS nedaju pouzit. Ja tam totiz nastavujem sietove politiky v parameteri pre MAC adresy (called station ID) mam len jedno textove pole, kde sa da pouzit aj regularny vyraz.

Viem tam zadat napr. nieco taketo: 00-05-9A-3C-78-00 | FF-05-9A-3C-79-0C | EF-00-9A-3A-79-0E - vtedy mi bude brat len tieto MAC adresy, no ja potrebujem presny opak - aby bralo vsetky MAC adresy okrem tychto troch:) Cize v podstate znegovat tento vyraz.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa audiotrack »

no tak si ten reťazec rozdelíš podľa | do poľa a pokračuješ tak ako som písal
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

audiotrack napísal:no tak si ten reťazec rozdelíš podľa | do poľa a pokračuješ tak ako som písal
No to je pekne, ale ja vobec neviem syntax regex v .net (teda presnejsie neviem napisat syntax negacie), preto som sem napisal:D
Mohol by si prosimta napisat syntax daneho regex na priklade vyssie uvedenych MAC adries?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa audiotrack »

nemohol, lebo ja o regexoch vôbec nepíšem. To len ty hladáš problémy tam kde nie sú. Ja vravím, aby si ten reťazec rozdelil do poľa podľa toho oddelovača, a v poli vyhľadávať už vieš. Buď na to je v net funkcia (neviem, neprogramujem v .net) alebo cyklom. A výsledok znegovať tiež vieš. Napísať takto komplexný regulárny výraz ti zaberie omnoho viac energie ako takáto jednoduchá práca s reťazcom a poľom
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

Ale ved som uz raz napisal, ze pole ani cyklus nemozem pouzit, Jedine co mozem v NPS pouzit je regex.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa audiotrack »

tak negácia je v regulárnych výrazoch sa zapisuje ako ^
tie adresy by mali byť oddelené tak ako ich maš, celé to daj do zátvorky (buď klasickej alebo hranatej, neviem ako sa to zapisuje v tom čo používaš) a pred zátvorku túto negáciu
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa BX »

Toto v reg. výrazoch ani nepôjde (ak v nich Microsoft nemá nejakú haluz)
Regexy sú na to, aby vyhľadávali zhodu so vzorom. To, čo chceš ty, sa popísať snáď ani nedá (a ak dá, tak nejako šialene)
Prečo to nemôžeš vyriešiť podmienkou IF NOT SediVyraz("...") THEN adresa tam nie je?
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

No, mozno som nasiel riesenie. Takze este raz co presne potrebujem:
Na Microsoft Network Policy Serveri potrebujem v jednej sietovej politike v parametri called station ID obmedzit pristup na 3 konkretne AP (z mnohych). Na vstupe dostavam retazce v tvare: MAC_adresa_AP:SSID - cize napriklad d0-57-4c-cb-f8-e0:guest Mozem pouzit len regex, konstrukcie ako polia, cykly, if su v tomto pripade vylucene.

Trosku som pogooglil a na zaklade tejto stranky http://www.regular-expressions.info/dotnet.html som nasiel riesenie pre odfiltrovanie jednej mac: ^(?!d0-57-4c-cb-f8-e0)
Vyskusal som ho zatial len na online testeri: http://www.iowacomputergurus.com/produc ... ion-tester kde to vracia spravne hodnoty, realne to vsak vyskusam az v praci, no nadalej ostavam skepticky:)

Uvitam taktiez dalsie navrhy, uplne najlepsie by bolo keby tu bol niekto kto pracuje konkretne s MS NPS, no to by som uz chcel asi vela:D
Mozno som aj mal napisat radsej do sekceie Internet a Siete, ale ten regex mi pripadal skor ako programatorsky problem.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa harrison314 »

Ak ide o klasicke .NET regexi, tak potom to znegujes takto ^(?!((mac-adres1)|(mac_adres2)|(mac_adres3))).*$

//autoeditácia príspevku (12 Jan 2013, 9:34)
nevsimol som si ze si to uz skusal
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

harrison314 napísal:Ak ide o klasicke .NET regexi, tak potom to znegujes takto ^(?!((mac-adres1)|(mac_adres2)|(mac_adres3))).*$
Diky a mozem sa este opytat co znamena " .$ " na konci tvojho vyrazu, resp. preco by to tam malo byt?
teleport
Expert
Expert
Používateľov profilový obrázok
Príspevky: 167
Registrovaný: 01 aug 2012, 16:06
Bydlisko: Bratislava

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa teleport »

reg. vyrazu zacinajucemu strieskou (^) moze odpovedat retazec len na zaciatku riadku / retazca
obdobne znak dolaru ($) odpoveda retazec na konci riadku / retazca
Flashrobot
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 06 dec 2005, 20:15
Bydlisko: Banská Bystrica, Slovakia

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa Flashrobot »

teleport napísal:reg. vyrazu zacinajucemu strieskou (^) moze odpovedat retazec len na zaciatku riadku / retazca
obdobne znak dolaru ($) odpoveda retazec na konci riadku / retazca
Ano, ^ a $ viem co znamenaju ale neviem presne co znamena kombinacia .*$ na konci toho vyrazu a preco by to konkretne v tomto mojom priklade tam malo byt.
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Negacia regularneho vyrazu v .net formate

Príspevok od používateľa harrison314 »

. znamena lobovolny znak
* znamena opakovanie 0 az nekonecno
+ znamena opakovanie 1 az nekonecno

V tom mojom pripade sekvencia .* pravdepodobne nie je nutna
Napísať odpoveď