2011-06-28 7 views
2

J'essaye de remplacer toutes les lettres et espaces après les deux premiers, en utilisant preg_replace de PHP. Voici ma tentative avortée de faire:Aide avec PHP regex

echo preg_replace('/^[a-zA-Z]{2}([a-zA-Z ])*.*$/i','','FALL 2012'); //expected output is "FA2012", but it outputs nothing 

Je suis juste essayer de remplacer la partie entre parenthèses ([a-zA-Z ]) .. Je suppose que je ne le fais pas droit de remplacer seulement la partie ..

Répondre

2

Vous lui demandez de remplacer la chaîne entière. Utilisez un lookbehind pour faire correspondre les deux premiers caractères à la place.

echo preg_replace('/(?<=^[a-z]{2})[a-z ]*/i','','FALL 2012'); 

Par ailleurs, le modificateur i signifie qu'il est insensible à la casse, de sorte que vous n'avez pas besoin de faire correspondre les deux caractères majuscules et minuscules.

+1

Je pense que vous avez le preg_match/preg_replace en arrière. preg_replace utilise le regroupement dans le remplacement. $ 1 est le premier groupe, $ 2 est le deuxième ... et ainsi de suite. –

+1

Cette expression a une faute de frappe (? jaytea

+0

@Jonathan: Vous avez raison. Pas assez de café, clairement. Supprimé cette partie de ma réponse. –

0

Le /i à la fin le rend insensible à la casse. Le (?<=regex) signifie regarder immédiatement avant la position actuelle pour le début de la ligne suivie de 2 lettres.

echo preg_replace('/(?<=^[a-z]{2})[a-z ]*/i','','FALL 2012'); 
0

vous voulez remplacer la totalité du match par un blanc (''). Vous voulez mettre les parenthèses autour des parties que vous voulez garder et ensuite remplacer par $ 1 $ 2 qui est égal à ce qui est dans le premier ($1) et le deuxième ($2) ensemble de parenthèses.

preg_replace("/^([a-z]{2})[a-z\s]*(.*)$/i", '$1$2', $string); 
0

Dans ce cas, vous pouvez obtenir un (?<=lookbehind); cependant, dans certains autres cas, vous pouvez trouver l'échappement \ K plus approprié. Ce qu'il fait est de réinitialiser la valeur de décalage de début passée par l'application à la position actuelle dans le sujet, en rejetant efficacement la partie de la chaîne qui a été consommée jusqu'à présent dans la correspondance en cours. Par exemple:

preg_replace('^[a-z]{2}\K[a-z ]*/i', '', 'FALL 2012') 

Maintenant seulement est remplacé par le sous-chaîne correspondante [a-z ]*.