[VB2008 | Regex] Comment faire une regex sur une chaine verifiant l'unicité des caractères qui la composent
Bonjour,
N'étant pas très doué avec l'outil puissant que sont les expressions régulière, je viens vous demander de l'aide :
J'aimerai vérifier dans une chaine de caractère composé uniquement de caractère [A-Z], qu'il n'y ais pas 2 fois le même caractère dans la chaine. La taille de la chaine peut etre variable :
AA => incorrect
ABCDFG => correct
ABBDFG=> incorrect
Est-ce possible avec les expressions régulières?
merci d'avance pour votre aide
regex et lettres contigues recurrentes
bonjour narutobaka
Si c'est des lettres recurrentes "contigues" Regex permet en utilisant un nom de groupe pour l'expression (il faut nommer l'expression pattern regex) de compter les "recurrences de lettres" alphabetiques avec ce que MSDN DOC appelle les backrefrences
La contiguite des caracteres recurrents est indispensable,autrement ils ne sont pas "vus".
code exemple:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
Imports System
Imports System.Text.RegularExpressions
Public Class frmRegexCompteCars
Private Sub btnOccurencesCars_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOccurencesCars.Click
'Define a regular expression for repeated chars.
'groupe d'expression : [a-zA-Z] caractere alphabetique
'syntaxe du nom groupe d'expression : ?'groupeNom'
'suivie de: \k'groupeNom'
Dim rx As New Regex("(?'groupeNom'[a-zA-Z])\'groupeNom'", _
RegexOptions.Compiled Or RegexOptions.IgnoreCase)
' Define a test string.
Dim monText As String = "ABbCDEFFGhH"
' Find matches.
Dim matches As MatchCollection = rx.Matches(monText)
' Report the number of matches found.
Me.TextBox1.Text = Me.TextBox1.Text & "matches found in:" & matches.Count & vbCrLf
Me.TextBox1.Text = Me.TextBox1.Text & monText & vbCrLf
' Report on each match.
For Each match As Match In matches
Dim groups As GroupCollection = match.Groups
Me.TextBox1.Text = Me.TextBox1.Text & groups.Item("groupeNom").Value & _
" repete en position : " & groups.Item(0).Index.ToString & vbCrLf
Next
End Sub
End Class |
bon code......