Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Regex ne nalazi karakter

[es] :: .NET :: Regex ne nalazi karakter

[ Pregleda: 2003 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.telekom.yu.



+104 Profil

icon Regex ne nalazi karakter13.11.2008. u 15:59 - pre 188 meseci
Pogledajte sledeći kod

Code:

            Dim r As New Regex("\xc6")
            Dim Source As String = "ĆĆĆĆĆĆĆĆĆĆ"    ' <---- kucano kao ALT + 0198
            Dim b(10) As Byte
            For i As Integer = 0 To 10
                b(i) = &HC6
            Next
            Dim source1 As String = System.Text.Encoding.Default.GetString(b)
            Dim mc As MatchCollection = r.Matches(Source)
            Debug.Print(mc.Count.ToString)   ' = 0
            mc = r.Matches(source1)
            Debug.Print(mc.Count.ToString)   ' = 0

            r = New Regex("Ć")    '<--- latinično slovo Ć
            mc = r.Matches(Source)
            Debug.Print(mc.Count.ToString)  ' = 10
            mc = r.Matches(source1)
            Debug.Print(mc.Count.ToString)  ' = 11


dva stringa popunjena sa kodovima &HC6 (latinično Ć). Ukoliko stringove pretražujem sa "\xc6" ne dobijam ni jedno poklapanje, ali ako pretražujem sa slovom "Ć" dobijem odgovarajući broj karaktera

Greška u kodu ili bug u .NET-u?
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
*.telekom.yu.



+104 Profil

icon Re: Regex ne nalazi karakter13.11.2008. u 16:26 - pre 188 meseci
Zaboravih da kažem da neke HEX karaktere nalazi, a neke ne. Primera radi ako tražim
Code:

dim r as new regex ("\xD3\xA8\xAF")

ne radi, ali zato
Code:

dim r as new regex ("\xD3\xA8Ž")

radi

&hAF = Ž
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Regex ne nalazi karakter13.11.2008. u 19:01 - pre 188 meseci
\xCC vazi samo za ASCII kodove (do 0x7E), za ostalo je nedefinisano koliko ja znam. &hAF = Ž nije ASCII code.


Mapiranje svih unicode karaktera mozes da postignes koristeci ukucano slovo u regex stringu (npr "\d*Ć") posto su svi stringovi u .NETu unicode a i sam regex u .NETu je unicode, nema potrebe za escape sekvencama
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.243.*



+104 Profil

icon Re: Regex ne nalazi karakter13.11.2008. u 20:49 - pre 188 meseci
kako onda radi za D3, A8, A9 i sl. ?

Inače traba da pretražim binarni fajl sa određenim sekvencama npr. D3A8C6, D3A9C6, D3A0E3 i sl.
Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Regex ne nalazi karakter13.11.2008. u 21:11 - pre 188 meseci
Iskreno iz glave nemam pojma, u svakom slucaju taj \xCC karakter se nekako encoduje u unicode (verovatno koristeci default snigle-byte character mapiranje za trenutnu kulturu) i onda se radi unicode regex.
Mislim da ti regex u .NETu nije idealno resenje za binarno pretrazivanje bas zato sto forsira rad samo sa stringovima (uostalom i nalazi se u System.Text) i kad ucitas svoj binarni fajl moraces da ga 'naduvas" u string preko necog encodinga sto ce proizvesti charcodove koji nece odgovarati binarno ka single byte u fajlu (tj lupam nece ti naduvati 0xd4 => 0x00d4 nego mozda 0x22f8 i slicno u zavisnosti od encodinga i maping tabele)
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.243.*



+104 Profil

icon Re: Regex ne nalazi karakter13.11.2008. u 22:52 - pre 188 meseci
OK, kako onda da pretražim binarne fajlove?


Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Regex ne nalazi karakter13.11.2008. u 23:27 - pre 188 meseci
Moraces da napravis svoj matcher, ne verujem da ti framework moze mnogo pomoci ovde. Mozes npr da iskoristis Array.IndexOf da nadjes D3 pa da onda proveris sledeca dva bajtaq za tvoju sekvencu.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

vujkev
Beograd

Član broj: 8072
Poruke: 1347
212.200.243.*



+104 Profil

icon Re: Regex ne nalazi karakter14.11.2008. u 01:33 - pre 188 meseci
Ja ili ne znam kako se pretražuje array ili ove nešto smrdi

Code:

 Using br As New IO.BinaryReader(New IO.FileStream("C:\Genius\ioCentre\gDevMgm.dll", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read))
            Dim b(CInt(br.BaseStream.Length) - 1) As Byte
            br.Read(b, 0, CInt(br.BaseStream.Length))
            Debug.Print(Array.IndexOf(b, 198, 0).ToString)     ' --- vrati -1
            Debug.Print(b(1180).ToString)                           ' ---- a na poziciji 1180 se lepo nalazi broj 198 koji sam i tražio :s
        End Using


Kad u regex-u umesto "\xc6" napišem "Ć" pretraga lepo radi, pa me interesuje da li bi to radilo na svim računarima nezavisno od regionalnih podešavanja?

Code:

   Using sr As New IO.StreamReader("C:\Genius\ioCentre\gDevMgm.dll", System.Text.Encoding.Default)

            Dim s As String = sr.ReadToEnd
            Dim rx As New Regex("ŔĆ\x05.*\x53\x6a\x03", RegexOptions.CultureInvariant) 
            Dim m As MatchCollection = rx.Matches(s)
            Debug.Print(m.Count.ToString)
            If m.Count > 0 Then
                Debug.Print(m(0).Index.ToString)
            End If
        End Using

Naučio sam...
Da je važnije biti ljubazan nego biti u pravu
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Regex ne nalazi karakter14.11.2008. u 09:34 - pre 188 meseci
Ne mozes da stavis samo 198 kao parametar za object tip, vb.net kompajler ce ga tretirati kao Int32 bez ikakvog upozorenja i pokusavace da nadje &H000000C6 u nizu bajtova, a posto vb.net nema literal za byte konstantu onda mora neki casting. Probaj neki od sledecih pristupa i radice:

Code:

            Debug.Print(Array.IndexOf(b, CByte(198), 0))
            Debug.Print(Array.IndexOf(Of Byte)(b, 198, 0))


Citat:
Kad u regex-u umesto "\xc6" napišem "Ć" pretraga lepo radi, pa me interesuje da li bi to radilo na svim računarima nezavisno od regionalnih podešavanja?


Pa nece i to je jedan od tvojih problema, kad npr kod mene pokrenem Regex("Ć").Matches dobijam 0 count iako fajl koji sam testirao sadrzi byte &HC6 (sa druge strane kod mene radi \xc6). Jedini razlog zato tebi Ć radi je verovatno zato sto je tvoj sistem nastelovan po nasem regional settingsu (central europe) pa je kod tebe codepage za ANSI tabelu takav da ti je C6 = Ć (Uni: 0x0106). Kod mene (US/Western settings) je C6 = Æ (Uni: 0x00c6) i zato mi recimo radi \xc6 za taj kod (a npr kod mene ne bi radilo \x9c zato sto je kod mene 9C = œ (Uni: 0x0153)). Nema leba od regexa ovde.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

[es] :: .NET :: Regex ne nalazi karakter

[ Pregleda: 2003 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.