Comment obtenir une sous-chaîne entre deux chaînes de caractères en PHP?
J'ai besoin d'une fonction qui retourne la sous-chaîne entre deux mots (ou deux caractères).
Je me demande s'il existe une fonction php qui permet d'atteindre que. Je ne veux pas penser à l'expression rationnelle (eh bien, je pourrais faire un, mais vraiment ne pense pas que c'est la meilleure façon de le faire). La pensée de strpos
et substr
fonctions.
Voici un exemple:
$string = "foo I wanna a cake foo";
Nous appelons la fonction: $substring = getInnerSubstring($string,"foo");
Il retourne: "je veux un gâteau ".
Merci à l'avance.
Mise à jour:
Eh bien, jusqu'à maintenant, je peux obtenir une sous-chaîne beteen deux mots en une seule chaîne, avez-vous le permis de me laisser aller un peu plus loin et demande si je peux l'étendre l'utilisation de getInnerSubstring($str,$delim)
pour obtenir toutes les chaînes que sont entre delim valeur, exemple:
$string =" foo I like php foo, but foo I also like asp foo, foo I feel hero foo";
- Je obtenir un tableau comme {"I like php", "I also like asp", "I feel hero"}
.
Vous devez vous connecter pour publier un commentaire.
Si les chaînes sont différentes (c'est à dire: [foo] & [/foo]), jetez un oeil à ce post de Justin Cook.
Je copie son code ci-dessous:
-s
dans le mot-self
. Je suppose que vous serez mieux servis par une expression régulière dans votre cas.Des expressions régulières est le chemin à parcourir:
onlinePhp
Exemple d'utilisation:
Exemple d'utilisation:
Si vous souhaitez supprimer environnant les espaces, utilisez
trim
. Exemple:J'aime l'expression régulière solutions, mais les autres ne me conviennent.
Si vous savez qu'il y est seulement va être 1 résultat vous pouvez utiliser les éléments suivants:
Changement AVANT et APRÈS souhaité délimiteurs.
Également garder à l'esprit que cette fonction retourne l'ensemble de la chaîne au cas où rien ne correspondait.
Cette solution est multi-ligne, mais vous pouvez jouer avec les modificateurs en fonction de vos besoins.
Si vous utilisez
foo
comme un séparateur, puis regarderexplode()
utilisation strstr fonction php deux fois.
sorties:
"is a great day to"
Exemple:
Ce sera le retour de "l'homme au milieu".
Si vous avez de multiples récidives à partir d'une seule chaîne et vous avez différentes [start] et [\end] modèle.
Voici une fonction qui génère un tableau.
Voici une fonction
L'utiliser comme
De sortie (notez qu'il retourne des espaces à l'avant et à la fin de votre chaîne s'il existe)
Si vous souhaitez couper résultat, utilisez la fonction comme
Résultat: Cette fonction permet de retourner faux si
$boundstring
n'a pas été trouvé dans$string
ou si$boundstring
existe en une seule fois dans$string
, sinon, elle retourne la sous-chaîne entre la première et la dernière occurrence de$boundstring
dans$string
.Références
IF
clause que vous parlez? peut-être que j'ai fait une faute de frappe, mais pour être honnête, je ne vois rien de bizarre à droite maintenant. Les deuxIF
s j'ai utilisé dans la fonction ci-dessus est correcte crochets entourant condition. PremièreIF
également entre accolades) qui entourent les 2 lignes de bloc, 2eIF
n'a pas besoin de 'em parce que c'est la seule ligne de code. Ce que je suis absent?Pas un php pro. mais j'ai récemment rencontré ce mur trop et c'est ce que je suis venu avec.
Utilisation:
Un peu à l'amélioration du code de GarciaWebDev et Henry Wang. Si vide $démarrer ou $fin est donné, la fonction retourne les valeurs à partir du début ou de la fin de la chaîne$. Compris également l'option est disponible, si nous voulons inclure le résultat de la recherche ou pas:
Je dois ajouter quelque chose à la poste de Jules Tilvikas. J'ai cherché une solution comme celle qu'il décrit dans son post. Mais je pense qu'il y a une erreur. Je n'ai pas vraiment la chaîne entre deux chaînes de caractères, j'ai également obtenir plus de cette solution, car j'ai pour soustraire la longueur de la chaîne. Quand ce faire, j'ai vraiment obtenir la Chaîne de caractères entre deux chaînes de caractères.
Voici mes changements de sa solution:
Greetz
V
Essayer cela, Son travail pour moi, d'obtenir des données entre test mot.
En PHP
strpos
style ce sera le retour defalse
si la marque de début desm
ou la marque de fin deem
ne sont pas trouvés.Ce résultat (
false
) est différents à partir d'une chaîne vide qu'est ce que vous obtenez si il n'y a rien entre le début et la fin des marques.La fonction sera de retour que le premier match.
C'est évident, mais vaut la peine de mentionner que la fonction va d'abord chercher
sm
et puis pourem
.Cela implique que vous ne pouvez pas obtenir le résultat souhaité et/ou du comportement si
em
doit être cherchée d'abord, puis la chaîne doivent être analysés en arrière à la recherche desm
.C'est la fonction que j'utilise pour ce. J'ai combiné deux réponses en une seule fonction pour un seul ou plusieurs séparateurs.
Pour une utilisation simple (retourne deux):
Pour l'obtention de chaque ligne dans un tableau de tableau résultat :
- Je utiliser
Subtitue <BALISE> pour tout ce délimiteur vous le souhaitez.
Amélioration de Alejandro réponse. Vous pouvez laisser le
$start
ou$end
arguments vides et il utilisera le début ou la fin de la chaîne.Une grande majorité de réponses ici ne réponds pas à la modification de la partie, je suppose qu'ils ont été ajoutées avant. Il peut être fait avec la regex, comme une réponse mentionne. J'ai eu une approche différente.
Cette fonction recherche dans $string et trouve le première chaîne entre $de début et de $fin chaînes de caractères, commençant à $position de décalage. Il met ensuite à jour le $offset de position de point pour le début de la suite. Si $includeDelimiters est vrai, il comprend les délimiteurs dans le résultat.
Si le début de dollars ou de fin de chaîne ne sont pas trouvés, elle renvoie null. Il renvoie également la valeur null si $string, $start,$, ou de fin sont une chaîne vide.
La fonction suivante trouve toutes les chaînes qui sont entre deux chaînes de caractères (pas de chevauchement). Il exige la fonction précédente, et les arguments sont les mêmes. Après l'exécution, $offset points au début du dernier trouvé chaîne de résultat.
Exemples:
str_between_all('foo 1 bar 2 foo 3 bar', 'foo', 'bar')
donne[' 1 ', ' 3 ']
.str_between_all('foo 1 bar 2', 'foo', 'bar')
donne[' 1 ']
.str_between_all('foo 1 foo 2 foo 3 foo', 'foo', 'foo')
donne[' 1 ', ' 3 ']
.str_between_all('foo 1 bar', 'foo', 'foo')
donne[]
.Utilisation:
J'ai eu quelques problèmes avec le get_string_between fonction de (), utilisée ici. Alors je suis venu avec ma propre version. Peut-être que ça pourrait aider des gens dans le même cas que le mien.
écrit ces il y a quelque temps, le trouve très utile pour un large éventail d'applications.
Avec une erreur de capture. Plus précisément, la plupart des fonctions présentées nécessitent $fin d'exister, alors qu'en fait, dans mon cas j'en avais besoin pour être en option. Utilisez ce est $fin est facultatif, et d'évaluer la valeur FALSE si $démarrer n'existe pas du tout:
UTF-8 version de @Alejandro Iglesias réponse, va travailler pour les caractères non latins:
Obtenu la meilleure solution pour cela de tonyspiro
d'une version révisée de ce que Alejandro García Iglesias mettre.
Cela vous permet de choisir un emplacement spécifique de la chaîne que vous souhaitez obtenir sur la base du nombre de fois que le résultat est obtenu.
utilisation:
strpos dispose d'une option d'entrée de commencer sa recherche à un point précis. afin de stocker la position précédente de $cpo ainsi, lorsque la boucle vérifie une fois encore, il commence à la fin de l'endroit où il l'avait laissé.
J'utilise depuis des années et il fonctionne bien. Il pourrait sans doute être plus efficaces, mais
grabstring("chaîne de Test","","",0) retourne la chaîne de Test
grabstring("chaîne de Test","Test ","",0) renvoie la chaîne
grabstring("chaîne de Test","s","",5) renvoie la chaîne de
}
utilisation:
Remplacer '/', avec votre premier personnage/chaîne et ')' avec votre caractère de fin de chaîne. 🙂