Expressions Rationnelle et comportement PCRE

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
mad
Messages : 32
Inscription : mar. 24/nov./2009 10:34

Expressions Rationnelle et comportement PCRE

Message par mad »

Bonjour à tous,

J'ai un petit souci avec une expression rationnelle, avec l'implémentation lié à Purebasic, le voici :


J'ai une chaine : aaaaabC ABc zbA abc

Sur cette chaîne je veux enlever le premier a de la ligne, soit le bleu.
L'expression que j'ai indiqué est la suivante -> ^a

J'effectue, avec la fonction ReplaceRegularExpression, un remplacement de caractère. je met un zéro par exemple...

Voici le code :

Code : Tout sélectionner

 If CreateRegularExpression(0, "^a")
    Result$ = ReplaceRegularExpression(0, "aaaaabC ABc zbA abc", "0")
    Debug Result$ ; Will print "--- ABc --- abc"
  Else
    Debug RegularExpressionError()
  EndIf
Et le retour, normalement il devrait remplacer que le premier caractère de la ligne par un zéro, mais ... voici le résultat.
00000bC ABc zbA abc
Pourtant cette expression à été vérifier et visiblement c'est la bonne. Est t'il possible d'avoir un problème d'implémentation ?
Avez vous déjà eu ce genre de problème ?

Merci a vous.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Expressions Rationnelle et comportement PCRE

Message par GallyHC »

Bonjour,

Si c'est pour juste retire le premier caractère d'une chaine, je me dit que votre solution est "pourquoi faire simple quand un peu faire compliqué"...

Une autres solution simple :

Code : Tout sélectionner

Define stemp.s = "aaaaabC ABc zbA abc"

stemp = "0" + Right(stemp, Len(stemp) - 1)

Debug stemp
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Expressions Rationnelle et comportement PCRE

Message par Ar-S »

Code : Tout sélectionner

t$ = "aaaaabC ABc zbA ABc"

If Left(t$,1) = "a"
  t$ = Mid(t$,2,Len(t$)-1)
  Debug t$
EndIf

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
mad
Messages : 32
Inscription : mar. 24/nov./2009 10:34

Re: Expressions Rationnelle et comportement PCRE

Message par mad »

Salut les gars,

Malheureusement, c'est un peu plus compliqué que ça. En effet j'utilise les expressions rationnelles, afin de traiter des chaînes de caractères et de longueur inconnu.

De plus c'est pour un logiciel qui est interfacé avec des utilisateurs.

Si j'utilise des mid, left, field et split, je louperais surement des chaines... vous l'aurez compris...

Donc je dois utiliser les expressions rationnelles ...

Par contre si Fred (Laboureur hein :lol: ), passe par là, j'aurais aimé savoir pourquoi il utilisait la fonction pcre_dfa_exec au lieu de pcre_exec ... car du coup je pense que cela vient de là ...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Expressions Rationnelle et comportement PCRE

Message par Backup »

mad a écrit :Malheureusement, c'est un peu plus compliqué que ça. En effet j'utilise les expressions rationnelles, afin de traiter des chaînes de caractères et de longueur inconnu.
aucune importance : la fonction len() est là pour ça ;)

mad a écrit :De plus c'est pour un logiciel qui est interfacé avec des utilisateurs.
ha ? .... et alors ?
mad a écrit :Si j'utilise des mid, left, field et split, je louperais surement des chaines... vous l'aurez compris...
ben non :oops: , je vois pas pourquoi tu louperai quelque chose ...
mad a écrit :Donc je dois utiliser les expressions rationnelles ...
si tu le dis :mrgreen:
mad a écrit :Par contre si Fred (Laboureur hein :lol: ), passe par là, j'aurais aimé savoir pourquoi il utilisait la fonction pcre_dfa_exec au lieu de pcre_exec ... car du coup je pense que cela vient de là ...
je pense aussi , que les Expressions reguliere , en Purebasic , ne fonctionnent pas vraiment comme il faut ...


je crois que tu ne nous en dis pas assez ...

donne ici un exemple de texte , que tu n'arrive pas a résoudre en passant par les fonctions Chaines (String ) de Purebasic ....
ça permettra peut etre de te proposer une solution , auquel tu ne t'attends pas ...

apres tout, le Purebasic n'as pas toujours eu les expressions régulieres, et noous y arrivions quand meme :) .... ou pas :lol:
Dernière modification par Backup le jeu. 23/août/2012 15:30, modifié 1 fois.
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Expressions Rationnelle et comportement PCRE

Message par Fred »

J'utilise pas la fonction pcre_dfa_exec() mais bien pcre_exec() :). Le truc c'est que ma routine de remplacement ne prend pas en compte ce cas particulier. Je vais regarder ca.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Expressions Rationnelle et comportement PCRE

Message par Backup »

GallyHc te donne une solution a ton probleme sans passer par les expressions reguliere

Code : Tout sélectionner


t$ = "aaaaabC ABc zbA ABc"

t$="0"+right(t$,len(t$)-1)

debug t$

d'ailleurs puisque Fred est la , tu ferai comment toi pour faire ceci ? (avec les REGEX )
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Expressions Rationnelle et comportement PCRE

Message par Mesa »

Un début de code :

Code : Tout sélectionner

If CreateRegularExpression(0, "^a+") ;^a{1,} marche aussi
  
  ; si le nombre de a est connu
  Result$ = ReplaceRegularExpression(0, "aaaaabC ABc zbA abc", "0aaaa") 
  Debug Result$ 
  
  ; sinon
  Dim Result2$(0)
  a = ExtractRegularExpression(0, "aaaaabC ABc zbA abc", result2$())
  Debug Result2$(0) ; ="aaaaa"
  result3$="0" + RemoveString(Result2$(0), "a", #PB_String_CaseSensitive , 1, 1); = "0aaaa"
  Debug Result3$
  
  
EndIf
Mesa.
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Expressions Rationnelle et comportement PCRE

Message par Fred »

Si la lib n'etait pas foireuse, le code original suffit pour gérer ca avec les regexp. J'imagine que son but n'est pas juste d'enlever le premier caractère d'une chaine, sinon il n'aurait pas utilisé ca.

Voici une nouvelle version de la lib qui devrait corriger le probleme: (windows x86)

http://www.purebasic.com/beta/windows_x ... Expression
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Expressions Rationnelle et comportement PCRE

Message par Ar-S »

Et voici une version sans Expression réguliere qui ne peut pas foirer.

Code : Tout sélectionner


; Initialisation ////////////////////
Global NewList chaine.s()
t$ = "aaaaabC ABc zbA aBcBA Aac"
Separateur.s = " "
NbrSeparateur.i = CountString(t$, Separateur)
Debug Str(NbrSeparateur) + " séparateurs"
Debug ""

ClearList(chaine())  


; Vérification de la chaine pour voir si elle se termine par un espace ou pas. Ainsi dans les 2 cas ça marche. (je suis parano oui ;)
Test.s = ReverseString(t$)
Car.s = Left(Test,1)
If Car = " "
  NbrSeparateur - 1
EndIf  


; traitement ////////////////////
For i = 1 To NbrSeparateur + 1
  
  mot.s = StringField(t$, i, Separateur)
  
  ; Detection ///////////////////
  If Left(mot,1) = "a"
    mot = Mid(mot,2,Len(mot)-1)
  EndIf  
    AddElement(chaine())
    chaine() = mot
  Next

  
; resultat //////////////////////
  
  ForEach chaine()
    
    Debug chaine()
    
  Next
  
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
mad
Messages : 32
Inscription : mar. 24/nov./2009 10:34

Re: Expressions Rationnelle et comportement PCRE

Message par mad »

Bonjour Mesa, Effectivement, il est possible d’altérer les expressions, mais les utilisateurs s'attendent à du compatible perl. :?


Bon ... Je vois que mon copain, Dobro est toujours là pour faire des remarques intéressantes... :lol:
Dernière modification par mad le jeu. 23/août/2012 16:57, modifié 1 fois.
mad
Messages : 32
Inscription : mar. 24/nov./2009 10:34

Re: Expressions Rationnelle et comportement PCRE

Message par mad »

Fred a écrit :Si la lib n'etait pas foireuse, le code original suffit pour gérer ca avec les regexp. J'imagine que son but n'est pas juste d'enlever le premier caractère d'une chaine, sinon il n'aurait pas utilisé ca.

Voici une nouvelle version de la lib qui devrait corriger le probleme: (windows x86)

http://www.purebasic.com/beta/windows_x ... Expression

+1 :mrgreen:

Merci pour la librairie.
mad
Messages : 32
Inscription : mar. 24/nov./2009 10:34

Re: Expressions Rationnelle et comportement PCRE

Message par mad »

Fred, je confirme ça marche beaucoup mieux pour mon expression.

Si tu veux je peux te tester la libraire. Si tu le souhaites tu peux me filer ton plan de test.

Merci encore.
Fred
Site Admin
Messages : 2805
Inscription : mer. 21/janv./2004 11:03

Re: Expressions Rationnelle et comportement PCRE

Message par Fred »

Si tu trouves d'autres problemes, n'hesites pas.
Répondre