Envoyé par
sbadecoder
Le décompte des solutions de Match (puis commande Next ...) donne au final moins de solutions qu'attendu.
Si tu trouves plus de résultats par tes tests c'est qu'il y a chevauchement (palindrome ou pas) et que tu n'incrémentes l'index que de un et non de la longueur du texte pour trouver le suivant.
Il est clair que si tu veux trouver deux fois ETE dans ETETE l'expression régulière proposée ne fonctionne pas. Il faut pour cela un positive lookhead (?=) qui va retourner l'index du motif sans pour autant avancer le curseur :
var Matches := TRegEx.Matches(Texte, '(?=ETE)', [roSingleLine]);
Et c'est plus ou moins le même principe pour trouver l'index d'un texte vertical. En admettant que tu aies un texte de 7 lignes de 7 caractères :
1 2 3 4 5 6 7 8 9
| var Texte := '-------'#13
+'---E---'#13
+'---T---'#13
+'---EE--'#13
+'---TT--'#13
+'---EE--'#13
+'-------';
Matches := TRegEx.Matches(Texte, '(?=E.{7}T.{7}E)', [roSingleLine]); |
. représente n'importe quel caractère ou symbole (retour à la ligne compris dû à roSingleLine) et on en compte 7 pour incrémenter d'une ligne.
Plus qu'à faire un DivMod pour retourner ligne/colonne.
Partager