3 votes

En utilisant PHP et les expressions régulières, insérez un caractère entre un groupe de caractères correspondants

Je voudrais insérer un caractère entre un groupe de caractères correspondants en utilisant regex pour définir le groupe et PHP pour placer le caractère dans la correspondance. En regardant ici, je vois que cela pourrait nécessiter une correspondance récursive en PHP, bien que j'imagine qu'il pourrait y avoir un moyen plus simple.

Pour illustrer, j'essaie d'insérer un espace dans une chaîne lorsqu'il y a une combinaison de 2 lettres ou plus adjacentes à un chiffre. L'espace doit être inséré entre les lettres et le(s) chiffre(s). L'exemple, "AXR900DE3", devrait renvoyer "AXR 900 DE 3".

Une solution pourrait être d'utiliser preg_split pour découper la chaîne de manière itérative et insérer des espaces en cours de route ? J'ai commencé une tentative en utilisant preg_replace ci-dessous pour le motif 2+lettres suivies d'un chiffre (je devrai également utiliser un motif, un chiffre suivi de 2+lettres), mais j'ai besoin d'une autre étape pour insérer l'espace entre cette correspondance.

$sku = "AXR900DEF334";
$string = preg_replace('/(?<=[A-Z]{2}[\d])/',' ', $sku);

5voto

ANisus Points 10898

Vous n'avez pas besoin de faire récursif. Si je vous ai bien compris, vous devriez être capable de faire ceci:

$sku = "AXR900DEF334";
$string = preg_replace('/((?<=[A-Z]{2})(?=[0-9])|(?<=[0-9])(?=[A-Z]{2}))/',' ', $sku);
echo $string;

RESULTAT

AXR 900 DEF 334

Cela va correspondre aussi bien lorsque les lettres précèdent que lorsqu'elles suivent les chiffres.

1voto

anubhava Points 172509

Essayez ce code php :

OUTPUT

string(14) "AXR 900DEF 334"

0voto

qbert220 Points 5029

Essayez cela :

0voto

Josh M. Points 9330

Vous devrez peut-être utiliser deux expressions :

Ajoutez un espace entre les caractères et les chiffres :

$sku = "AXR900DEF334";
$sku = preg_replace('/([A-Z]{2,})([\d])/','\1 \2', $sku);

Puis ajoutez un espace entre les chiffres et les caractères :

$sku = preg_replace('/([\d])([A-Z]{2,})/','\1 \2', $sku);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X