2010-12-13 1 views
1

Im essayant de remplacer une suppression de nouvelles lignes non judicieuses avec preg-replace mais mon regex est incorrect. Quelqu'un d'idées quelles sont les erreurs avec mon regex? (J'ai Apache/2.0.54 & PHP/5.2.9Fonction php preg_replace avec regex ne fonctionnant pas, une question de syntaxe

Demandez maintenant:

{ 
blaa { 
blow; 
blue}; 
bell;} 
}ball 

SOUHAITE:

{blaa {blow;blue};bell;}}ball 

Ces regex ne fonctionnent pas, ils enlèvent trop ou toolitle? ?

$buffer = preg_replace('#/\}\n|\r|\s/#s', '}', $buffer); 
$buffer = preg_replace('#/\{\n|\r|\s/#s', '{', $buffer); 
$buffer = preg_replace('#/\;\n|\r|\s/#s', ';', $buffer); 

/g (global) donne le contenu blanc et sans le # il doestnt quoi que ce soit. étrange?!Quelqu'un n'importe quelle idée pourquoi ceux-ci ne fonctionnent pas?

+1

'\ s' contient déjà' \ r' et '\ n'. – Gumbo

Répondre

1

Si vous souhaitez supprimer les espaces blancs après {, } et ;, faites ceci:

preg_replace('/([{};])\s+/', '$1', $buffer) 

Voici / sont les delimiters; ([{};]) décrit un caractère de {, }, et ; tandis que la correspondance est capturée; et décrit les caractères d'espacement suivants (incluant déjà \r et \n).

+0

Merci Gumbo pour l'explication aussi !! – Sam

1
$buffer = preg_replace('#([{};])(?:\n|\r|\s)#s', '$1', $buffer); 
+0

Merci JoostK !! – Sam

1

Cela fonctionne pour moi:

$buffer = preg_replace('/\}\\n|\\r|\\s/', '', $buffer); 
+0

merci Thariama !! – Sam

+0

L'OP utilisait déjà des chaînes à guillemets simples, donc les antislashs n'étaient pas le problème. (Le fait de les doubler n'a eu aucun effet, l'analyseur PHP supprime juste les extras avant que l'analyseur * regex * ne les voit.) –