J'essaye de diviser ma chaîne en un tableau. Toutes les chaînes entre les signes de calcul +/*-:
Array
(
[0] => quantity
[1] => price
[1] => tax
)
Voici ce que j'essaye de réaliser:
$keywords = preg_split("/[\s,-]*[+-*]+/", "quanity*price/2+tax");
Mais le résultat est une chaîne vide.
3 Réponses :
Cela divisera la chaîne là où l'un d'entre eux existe: + / * et en créera un tableau:
$string = "quanity*price/2+tax";
$str_arr = preg_split ("/[-*\/+\d]+/", $string);
print_r($str_arr);
Code publié avec votre exemple pour plus de clarté.
p>
Utilisation de l'expression régulière recommandée par le quatrième oiseau:
$keywords = preg_split("/[-*\/+\d]+/", "quanity*price/2+tax", -1, PREG_SPLIT_NO_EMPTY);
Le PREG_SPLIT_NO_EMPTY doit supprimer les valeurs vides ( https://www.php.net//manual/en/function.preg-split.php ).
Le résultat de votre réponse: array: 1 [▼ 0 => "quanity * price / 2 + tax"]
Excellente prise, @peace_love. J'avais manqué le troisième paramètre facultatif dans preg_split et j'avais égaré le drapeau. J'ai mis à jour ma réponse pour inclure -1 pour le paramètre $ limit, pour ne spécifier aucune limite. J'aurais pu aussi passer 0 ou null .
Dans le modèle que vous avez essayé, la deuxième classe de caractères ne correspond pas à un chiffre et le tiret doit être échappé ou placé au début / à la fin.
Vous pouvez utiliser une seule classe de caractères à la place. Si vous remplacez le délimiteur par un autre que / comme ~ , vous n’avez pas besoin d’échapper la barre oblique.
[\s,]*[-*/+\d]+
Par exemple
Array
(
[0] => quanity
[1] => price
[2] => tax
)
Array
(
[0] => quanity
[1] => price
)
Sortie
$strings = [
"quanity*price/2+tax",
"quanity*price/2"
];
foreach ($strings as $string) {
$keywords = preg_split("~[-*/+\d]+~", $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($keywords);
}
Si vous voulez également faire correspondre 0+ caractères d'espacement précédents, virgules:
[-*\/+\d]+
Voulez-vous dire diviser sur
[- * \ / + \ d] +regex101. com / r / 3NEEfc / 1 Vous pouvez déplacer le-au début / à la fin de la classe de caractères ou l'échapper\ -oh, c'est le site Web dont j'ai vraiment besoin. Merci
Non, mais le quatrième oiseau l'offrait sans demander
pourquoi ne pas exploser + str_replace ici ??
@Thefourthbird J'ai testé votre code. ça marche, mais pas, si j'essaye cette ligne "quanity * price / 2". Ensuite, j'obtiens une valeur vide dans mon tableau
@devpro j'ai lu dans un tutoriel qui explose ne fonctionne pas avec plusieurs caractères
+ / * -@peace_love C'est à cause de la scission. Il y a une correspondance mais rien sur la droite donc elle sera vide. Quel est le résultat / comportement attendu?
Voici la sortie:
array: 3 [▼ 0 => "quanity" 1 => "price" 2 => ""]Ceci est attendu:array: 3 [▼ 0 => "quanity" 1 => "prix"]@peace_love Vous pouvez le faire comme ceci 3v4l.org/dmdHP