Avatar billede oswald Nybegynder
22. marts 2005 - 10:43 Der er 3 kommentarer og
1 løsning

unicode, regexp og bogstavet i

Jeg forsøger at lave et RegExp som scanner en tekst for ulovlige karakterer men er stødt ind i et problem som jeg har prøvet at skitserer i den følgende. Hvis den beskrevne fejl ikke opstår så prøv at paste den fra Word.

Lav en windows form med 1 textbox (textBox1) og 3 labels (label1, label2,lavel3) bind textBox1 eventen TextChanged op på følgende funktion.

private void textBox1_TextChanged(object sender, System.EventArgs e) {
    label1.Text = "";
    label2.Text = "";
    label3.Text = "";
   
    Regex RegExp_A_2_Z = new Regex(@"[a-z]",RegexOptions.IgnoreCase);
    Regex RegExp_Chr0000_2_Chr00FF = new Regex(@"[\u0000-\u00FF]",RegexOptions.IgnoreCase);
    Regex RegExp_Over_Chr00FF = new Regex(@"[\u00FF-\uFFFF]",RegexOptions.IgnoreCase);

    string TestStr1 = textBox1.Text;

    foreach (Match M in RegExp_A_2_Z.Matches(TestStr1)) label1.Text += M.ToString();
    foreach (Match M in RegExp_Chr0000_2_Chr00FF.Matches(TestStr1))  label2.Text += M.ToString();
    foreach (Match M in RegExp_Over_Chr00FF.Matches(TestStr1)) label3.Text += M.ToString();
}

Prøv nu at skrive ”abcdefgh” i tekstboxen.
label1 viser nu alle bogstaver mellem a og z altså ”abcdefgh”.
label2 viser alle karakterer med en unicode mellem 0 og 256 altså ”abcdefgh”.
label3 viser alle karakterer over unicode 256 altså ingen ting.
Men prøv nu at tilføje ”ijklmnop” til tekstboxen.
label1 og label2 viser hvad men vil forvente, men label3 viser ”i”.

Spørgsmålet er derfor som følgende. Hvorfor mener regexp at i befinder sig i både unicode intervallerne 0-FF og FF-FFFF. Og hvordan omgår jeg det i mit regexp.
Avatar billede oswald Nybegynder
22. marts 2005 - 11:09 #1
Det ser ud til at hvis man fjerne RegexOptions.IgnoreCase fra FF-FFFF udtrykker så virker det (fra RuneSoft), men hvorfor mangler stadig at blive besvaret ;)
Avatar billede runesoft Nybegynder
22. marts 2005 - 11:14 #2
Jeg ved det ikke, men det giver heller ikke ret meget mening at bruge ignore case i det tilfælde. Måske er der nogle sprog der har en anden case til 'i' liggende i det andet område.
Avatar billede oswald Nybegynder
22. marts 2005 - 11:19 #3
Min bror mener at fejlen ligger i unicode konverteringen mellem upper og lower. Hvilket er et bud på årsagen
Avatar billede runesoft Nybegynder
22. marts 2005 - 11:49 #4
øhhh...  lyder det ikke mere sandsynligt at det er RegEx's håndtering af unicode?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester