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