2009-11-11 6 views
0

Problèmes avec le modèle et le remplacement. Comment puis-je effectuer le remplacement d'écho un produit final tel queUtilisation de preg_replace pour formater

INSERT INTO `table` (`person`, `file`) VALUES 
('test','test'), 
('test2','test2'), 
('test3','test3'); 

Je suis en train d'insérer la chaîne dans SQL mais je dois formater la chaîne actuelle ci-dessous pour le faire, et je dois avoir la dernière partie de la chaîne test3: test3 ou tout ce que le texte peut être pour fermer le modèle SQL ('test3', 'test3');

<?php 
$string = 'test:test test2:test2 test3:test3'; 
$pattern = ''; 
$replacement = ''; 
echo preg_replace($pattern, $replacement, $string); 
?> 

En outre, il peut aussi avoir une chaîne telle que cela? '[email protected]:test test2:test2' alors que l'email sera avant le deux points à toutes les fois.

+0

Ceci est certainement une mauvaise utilisation des expressions régulières. Que ferez-vous quand une valeur contient un deux-points, un guillemet simple, une nouvelle ligne ou tout autre nombre de caractères qui ont une signification particulière dans sql? –

+0

Il n'y aura pas d'autres données. Je m'en suis assuré. Il est strictement biaisé pour tester: test – Homework

Répondre

1

Essayez quelque chose comme ceci:

$string = 'test:test test2:test2 test3:test3'; 
$patterns = array("/([^\s:]+):([^\s:]+)/", "/\s++\(/"); 
$replacements = array("('$1', '$2')", ", ("); 
$sql = 'INSERT INTO `table` (`person`, `file`) VALUES ' . preg_replace($patterns, $replacements, $string) . ';'; 
echo $sql . "\n"; 

Une explication:

Regex 1 
    ([^\s:]+) # match one or more chars other than white space chars and colons and store it in group 1 
    :   # match a colon 
    ([^\s:]+) # match one or more chars other than white space chars and colons and store it in group 2 
Replacement 1 
    (   # insert a '(' 
    '$1'  # insert what is matched in group 1 and surround it with single quotes 
    ,   # insert ', ' 
    '$2'  # insert what is matched in group 2 and surround it with single quotes 
)   # insert a ')' 

Regex 2 
    \s++  # match one or more white space chars 
    \(   # match a '(' 
Replacement 2 
    , (  # insert ', (' 
+0

@Bart Merci beaucoup. Je suis si inexpérimenté avec ça, je me suis amusé avec ça pendant une heure maintenant. – Homework

+0

Pas de problème. Assurez-vous de bien comprendre ce que vous faites (lisez attentivement mon explication). –