comment obtenir tout ce qui est avant et après un certain mot dans la chaîne de
comment puis-je obtenir le tout dans une chaîne php avant et après un certain mot? Par exemple, si j'ai une chaîne qui dit que "5 fois 8", comment puis-je extraire le 5 et le 8 et de les stocker dans des variables séparées? Je suis un peu nouveau pour PHP.
J'ai essayé
$foo = "5 times 8";
$foo = str_replace(" times ","",$foo);
Alors quoi? Le résultat est "58"
pourquoi la baisse de vote???
php.net/manual/en/function.substr.php regardez ici 🙂
Ni avez-vous donné assez de détails sur la question. Par exemple, ce qui se passe si votre sujet a été "5 fois 8 fois". Quelle instance de "temps" est votre "mot"?
Je n'ai pas vous dire ce que j'ai essayé, parce que je suis nouveau en PHP et na pas savoir par où commencer
aussi, je vais avoir une seule instance de fois dans ma chaîne
php.net/manual/en/function.substr.php regardez ici 🙂
Ni avez-vous donné assez de détails sur la question. Par exemple, ce qui se passe si votre sujet a été "5 fois 8 fois". Quelle instance de "temps" est votre "mot"?
Je n'ai pas vous dire ce que j'ai essayé, parce que je suis nouveau en PHP et na pas savoir par où commencer
aussi, je vais avoir une seule instance de fois dans ma chaîne
OriginalL'auteur Thomas Lai | 2013-03-25
Vous devez vous connecter pour publier un commentaire.
Si vous êtes certain que votre chaîne d'entrée contient
" times "
ensuite, vous pouvez faire ceci:Si vous avez besoin de faire quelque chose d'un peu plus complexe, l'utilisation des expressions régulières:
+1. Mais @ThomasLai être conscient que l'expression régulière spécifiée ici fonctionne de façon explicite pour les numéros de chaque côté de votre "mot" (selon votre un exemple)... donc si vous avez besoin par exemple de texte de chaque côté de votre parole, vous avez besoin de remplacer Cal
\d
'avec un autre caractère de classe - voir regular-expressions.info/reference.htmlOriginalL'auteur Cal
Vous pouvez utiliser le explode() fonction, comme ceci:
OriginalL'auteur Nelson
vous pouvez
explode()
à l'aide de votre chaîne...Cela fonctionne
OriginalL'auteur Neer
Je ne suis pas entièrement sûr de ce que vous essayez, mais peut-être cela peut vous aider:
Si vous exploser la chaîne avec explode($délimiteur, $string, [$limit]), étant dans le cas où vous comme un exemple de "reprises", comme l' $délimiteur, vous pouvez obtenir un tableau avec 5 et 8 en tant que valeurs.
Donc:
donnerait
Espérons que cette aide!
OriginalL'auteur Sebastian Neira
Que vous avez dit dans votre question "comment obtenir tout avant et après un certain mot". Donc, cela permet d'obtenir des tout. Remplacer les instances de
.*
avec par exemple les\d*
pour obtenir par exemple numberic chiffres de chaque côté.Le suivant sera de retour 0 si aucune correspondance trouvée, ou >0 si les correspondances trouvées.
preg_match_all('/^(.*)times(.*)$/', $yourStringToSearch, $arr, PREG_PATTERN_ORDER);
Si les correspondances trouvées,
$arr
sera rempli.Donc par exemple si le "temps" est trouvé, mais sans pré/post-texte, puis il va retourner 1, et
$arr[0]
contiennent uniquement du "temps".Ainsi, par exemple, si
$yourStringToSearch
contient "5 fois 8", puis$arr
sera rempli comme suit (où$arr[0]
est le match en entier,$arr[1]
est le pré-texte, et$arr[2]
est de la post-texte).Mais, attention, car si
$yourStringToSearch = "5 _times_ -times- 8"
ça va revenir:Qui est - vous besoin de spécifier ce que vous voulez arriver dans le cas où votre chaîne de recherche apparaît plus d'une fois dans la cible, ou d'accepter le "par défaut" dans ce cas où le premier match de votre terme de recherche est "le" match.
Si vous avez besoin pour assurer le terme de recherche est entouré par des espaces, puis les deux suivantes auront à travailler. La première suppose que vous ne voulez pas "capturer" l'espace, tandis que le second comprendra l'espace dans la capture:
preg_match_all('/^(.*) times (.*)$/', $yourStringToSearch, $arr, PREG_PATTERN_ORDER);
preg_match_all('/^(.* )times( .*)$/', $yourStringToSearch, $arr, PREG_PATTERN_ORDER);
$arr[1][0]
contient"5 times"
. mise à jour: votre nouveau code, en effet, de retour de ce que vous prétendez 🙂désolé copié une frontière de cas de test (pour mettre en évidence un problème avec la question!) dans ma réponse accidentellement. Fixe.
OriginalL'auteur Sepster
Vous pouvez utiliser le
substr
fonction : http://www.php.net/manual/en/function.substr.phpet si vous ne connaissez pas la position de la parole, de l'utilisation
strpos
pour l'obtenir : http://php.net/manual/en/function.strpos.phpOriginalL'auteur Olivier Picault