PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 30-01-2014 13:06:13

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Pour les rois des expressions régulières ;)

Bonjour a tous,
Suis pas très for avec les regexp.
Le problème est simple, j'ai 2 fois "WHERE" dans une string et je voudrai remplacer le 2ieme par "AND".
Merci a vous tous.

Hors ligne

#2 27-02-2014 19:59:41

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Pour les rois des expressions régulières ;)

Salut Pierrot,

C'est un peu délicat car pour matcher correctement ton problème tu n'as besoin de définir qu'un seul pattern. Pour en définir 2, il faut qu'ils soient différents, du moins à ma connaissance, n'étant pas un spécialiste des regexp.

Ton pattern est le suivant :


$basestring='SELECT col1,col2,col3 FROM myTable WHERE col1=1 WHERE col2=2';
$pattern='#[.*\s](WHERE)[\s.*]#';
$replacestring=' AND '; $replace_array=array();
$b=preg_match_all($pattern,$basestring,$replace_array);
$c=preg_replace($pattern,$replacestring,$basestring);
 

Le problème ici c'est que tous tes WHERE seront remplacés par ' AND ', n'ayant qu'un seul pattern. Je pense qu'il te faille trouver la solution via un array du style $replacearray=array(' WHERE ',' AND ');
En sachant que si tu utilises $replace_array dans le preg_match_all un print_r te donnera un truc du genre
Array ( [0] => Array ( [0] => WHERE [1] => WHERE ) [1] => Array ( [0] => WHERE [1] => WHERE ) )

J'ai pas le temps de trouver la solution désolé. Si tu la trouves à partir de ça, fait nous en profiter wink


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 28-02-2014 16:45:21

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Pour les rois des expressions régulières ;)

Salut,


    function str_lreplace($search, $replace, $subject){
        return preg_replace('~(.*)' . preg_quote($search, '~') . '~', '$1' . $replace, $subject, 1);
    }
 

a++

Hors ligne

Pied de page des forums