Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# et Regex

Sujet résolu
    17 mai 2011 à 16:46:56

    Bonjour à toutes et à tous,
    Je viens vers vous car j'ai un petit souci en c#.
    Le but de cette fonction est de reproduire une coloration syntaxique en temps réel.

    private void colorierEnEcrivant()
    {
    	string motAColorier = "";
    	
    	motAColorier = "[^a-zA-Z0-9](select|from|where|as)[^a-zA-Z0-9]";
    	couleurDuMot = Color.Blue;
    	
    	Regex monregex = new Regex(motAColorier, RegexOptions.Multiline | RegexOptions.IgnoreCase);
    	MatchCollection mc = monregex.Matches(rtbTexte.Text);	//rtbTexte = richtextbox
    	int StartCursorPosition = rtbTexte.SelectionStart;
    	foreach (Match m in mc)
    	{
    		int startIndex = m.Index;
    		int StopIndex = m.Length;
    		rtbTexte.Select(startIndex, StopIndex);
    		rtbTexte.SelectionColor = couleurDuMot;
    	}
    	rtbTexte.SelectionStart = StartCursorPosition;
    	rtbTexte.SelectionColor = Color.Black;
    	rtbTexte.Select(StartCursorPosition, 0);
    }
    


    La fonction est activée à chaque fois qu'une lettre change dans la richtextbox (nommée : rtbTexte).
    la fonction colorie mes mots "magiques" parfaitement. Cependant, j'ai un petit soucis lorsque 2 mots "magiques" se suivent.
    Car si j'écris quelque chose comme ceci (qui n'a aucun sens je l'accorde) : "select select select select " la coloration donnera "select select select select ".
    Quand je regarde le contenu de "m" la collection "mc", on s’aperçoit qu'elle contient des " select " au lieu de "select" (c'est pour cela qu'un select sur deux est colorié.

    Voili voilou pour mon problème, si quelqu'un a une petite idée...
    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2011 à 19:28:36

      T'a regex qui n'est pas bonne :)

      J'ai pas trop compris l'intérêt du "tout sauf".
      Tu peut faire comme ça :

      [^a-zA-Z0-9]*(select|from|where|as)[^a-zA-Z0-9]*
      


      (J'ai rajouté les étoiles afin d'indiquer que ça doit être présent 0,1 ou N fois)
      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2011 à 19:57:21

        Merci Themys de ta réponse mais cela ne résoud pas vraiment mon problème. Si je tape le mot "aspirateur" cela va donner "aspirateur".
        Je veux que "as" soit en bleu seulement lorsqu'il n'y a pas de lettre (minuscule et majuscule) et de chiffre avant et après.
        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2011 à 22:30:58

          Essaye ça alors :)

          (\\s+|^)(select|from|where|as)(\\s+|$)
          


          Edit : quoi que nan, c'toujours la même chose

          va pour celle là alors :
          (\\s+|^)(select|from|where|as)(\\s+|$)(select|from|where|as)*
          



          • Partager sur Facebook
          • Partager sur Twitter

          C# et Regex

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown