Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/08/2011, 03h12   #1
Membre habitué
 
Inscription : avril 2009
Messages : 287
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 287
Points : 127
Points : 127
Par défaut Remplacer les {} d'un chaine quand pas entre ""

Bonjour,

je cherche à obtenir ce résultat:
Code :
SELECT * FROM p_table_t WHERE name = "{table} {table} text {table}"
voici la string de référence:
Code :
SELECT * FROM {table} WHERE name = "{table} {table} text {table}"
et voici un pattern que j'ai testé:
bien sur voici le résultat:
Code :
SELECT * FROMp_table_t WHERE name = "{table}p_table_t textp_table_t"
Je ne vois pas trop comment parvenir à l'aide d'un pattern au résultat que je souhaiterai.

Auriez vous une idée?
dtcSearch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 10h41   #2
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 568
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 568
Points : 2 493
Points : 2 493
Hello,

Je ne suis pas un pro en expression régulière, mais la solution suivante semble répondre à ta demande :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$in = 'SELECT * FROM {table} WHERE name = "{table} {table} text {table}"';
 
$out = '';
 
$array = preg_split('/("[^"]*")/', $in, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($array as $str) {
	if (strpos($str, '"') === false) {
		$str = str_replace('{table}', 'p_table_t', $str);
	}
 
	$out .= $str;
}
 
echo $in . ' -> ' . $out;
?>
Bon développement
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/08/2011, 20h37   #3
Membre habitué
 
Inscription : avril 2009
Messages : 287
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 287
Points : 127
Points : 127
tout simplement génial
ça prend en compte lorsque c'est uniquement pas dans des quotes
marche même avec des string comme ça:
Code :
SELECT * FROM {table} WHERE name = "{table} {table} text {table}" ORDER {table}.name ASC
Franchement, un grand merci, j'avais jamais pensé à regarder preg_split.

Vraiment, merci
dtcSearch est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h14.


 
 
 
 
Partenaires

Hébergement Web