OVH Cloud OVH Cloud

Regexp: recherche chaine de caractere ne marche pas !!

5 réponses
Avatar
lepetitjoe
Allo tous

j=B4ai un probleme:

je n=B4arrive pas a resortir une suite de caracteres bien pr=E9cise afin
de poser une condition.
Par exemple, mon fichier a ces caracteres suivant que je lis:

blabla erx4:e4_vr1 tititi
tototototo erx4:e4_vr11
fofofofo erx4:e4_vr13 lalala
nananan erx4:e4_vr10
papapapa erx4:e4_vr11
bibibibi erx4:e4_vr1 XXXX

je lis du fichier A pour copier dans le fichier B si $_ contient
"erx4:e4_vr1"
je voudrai qu=B4il ne copie a chaque fois que erx4:e4_vr1 et non
erx4:e4_vr[B]11[/B] ou erx4:e4_vr[B]13 [/B]ou erx4:e4_vr[B]10[/B].....

Chacun sera copi=E9 dans son fichier a lui en fonction du contenu de ma
variable de recherche qe j=B4appele $texte qui contient a chaque passage
de boucle l=B4un de ces mots cl=E9s la...

mon code: [CODE]
//$texte contient par exemple erx4:e4_vr1, j=B4ai fait un test en
l=B4affichant et il contient effectivement erx4:e4_vr1

while (<File>){

print FH $_ if $_ =3D~ /$texte/;

}

[/CODE]

Mon probleme il prend aussi les lignes contenant erx4:e4_vr11
,13,10....
je ne veux que les lignes avec erx4:e4_vr[B]1[/B]

Merci de m=B4aider...

5 réponses

Avatar
lepetitjoe
je renvoie le Post rectifié:

j´ai un probleme:

je n´arrive pas a resortir une suite de caracteres bien précise afin
de poser une condition.
Par exemple, mon fichier a ces caracteres suivant que je lis:

blabla erx4:e4_vr1 tititi
tototototo erx4:e4_vr11
fofofofo erx4:e4_vr13 lalala
nananan erx4:e4_vr10
papapapa erx4:e4_vr11
bibibibi erx4:e4_vr1 XXXX

je lis du fichier A pour copier dans le fichier B si $_ contient
"erx4:e4_vr1"
je voudrai qu´il ne copie a chaque fois que erx4:e4_vr1 et non
erx4:e4_vr11 ou erx4:e4_vr13 ou erx4:e4_vr10.....

Chacun sera copié dans son fichier a lui en fonction du contenu de ma
variable de recherche qe j´appele $texte qui contient a chaque passage
de boucle l´un de ces mots clés la...

mon code:
//$texte contient par exemple erx4:e4_vr1, j´ai fait un test en
l´affichant et il contient effectivement erx4:e4_vr1

while (<File>){

print FH $_ if $_ =~ /$texte/;

}



Mon probleme il prend aussi les lignes contenant erx4:e4_vr11
,13,10....
je ne veux que les lignes avec erx4:e4_vr1

Merci de m´aider...
Avatar
F. Senault

while (<File>){

print FH $_ if $_ =~ /$texte/;

}

Mon probleme il prend aussi les lignes contenant erx4:e4_vr11
,13,10....
je ne veux que les lignes avec erx4:e4_vr1


Normal - ces lignes contiennent bien cette valeur. Essaye d'encadrer
ton expression de b (qui détecte une début / fin de mot) :

print FH $_ if $_ =~ /b$texteb/;

Fred
--
All we need to do is make sure we keep talking
Why won't you talk to me I feel like I'm drowning You never talk to me
You know I can't breathe now What are you thinking We're going nowhere
What are you feeling We're going nowhere (Pink Floyd, Keep Talking)

Avatar
lepetitjoe
Merci ca marche !!!
A bientot
Avatar
Klaus
wrote:
F. Senault wrote:

while (<File>){

print FH $_ if $_ =~ /$texte/;

}

Mon probleme il prend aussi les lignes contenant erx4:e4_vr11
,13,10....
je ne veux que les lignes avec erx4:e4_vr1


Normal - ces lignes contiennent bien cette valeur. Essaye d'encadrer
ton expression de b (qui détecte une début / fin de mot) :

print FH $_ if $_ =~ /b$texteb/;

Merci ca marche !!!

A bientot


ça marche pour le cas $texte = "erx4:e4_vr1", mais est-ce que ça
marche avec des caractères spéciaux de regexp, comme par ex. le "+".

par exemple, essayé:

$texte = "erx4+e4_vr1";
$_ = "erx4+e4_vr1";
print FH $_ if $_ =~ /b$texteb/;



Avatar
Klaus
Klaus wrote:
wrote:
F. Senault wrote:

while (<File>){

print FH $_ if $_ =~ /$texte/;

}

Mon probleme il prend aussi les lignes contenant erx4:e4_vr11
,13,10....
je ne veux que les lignes avec erx4:e4_vr1


Normal - ces lignes contiennent bien cette valeur. Essaye d'encadrer
ton expression de b (qui détecte une début / fin de mot) :

print FH $_ if $_ =~ /b$texteb/;

Merci ca marche !!!

A bientot


ça marche pour le cas $texte = "erx4:e4_vr1", mais est-ce que ça
marche avec des caractères spéciaux de regexp, comme par ex. le "+".

par exemple, essayé:

$texte = "erx4+e4_vr1";
$_ = "erx4+e4_vr1";
print FH $_ if $_ =~ /b$texteb/;


Quand on a des caractères spéciaux "({[+.^$]})" dans une variable
interpolé d'une regexp, il faut mettre des Q...E autour de la
variable:

/bQ$texteEb/

Voici un programme avec le caractère "+" dans la variable $texte
interpolé dans une regexp:
=======================
use strict;
use warnings;

my $texte = "erx4+e4_vr1";
$_ = "abc erx4+e4_vr1 xyz";

print "$_ = '$_'n";
print "$texte = '$texte'n";
print "n";

test1();
test2();

sub test1 {
print '$_ =~ /b$texteb/ --> ';
if (/b$texteb/) {
print 'trouve';
}
else {
print 'ne trouve pas';
}
print "n";
}

sub test2 {
print '$_ =~ /bQ$texteEb/ --> ';
if (/bQ$texteEb/) {
print 'trouve';
}
else {
print 'ne trouve pas';
}
print "n";
}
=======================

résultat:
=======================
$_ = 'abc erx4+e4_vr1 xyz'
$texte = 'erx4+e4_vr1'

$_ =~ /b$texteb/ --> ne trouve pas
$_ =~ /bQ$texteEb/ --> trouve
=======================