Votre question n'est pas claire / ambiguë. Vous utilisez le terme remove, mais il semble probable que vous vouliez extractque la chaîne ciblée puisse être stockée dans la base de données.
mickmackusa le
@Makyen Je suis convaincu que vous avez vandalisé la question pour que bon nombre des réponses soient correctes. Pensez-y: pourquoi l'OP voudrait-il enregistrer REGISTER heredans la base de données?
mickmackusa le
2
@mickmackusa remove peut être synonyme de take away from, c'est-à-dire en retirant 11223344 de la chaîne, je ne vois pas le problème ici. Au pire, c'est ambigu, ce n'est certainement pas "vandalisé"
Nick
Lisez la (les) version (s) pré-vandalisée (s). @Nick stackoverflow.com/posts/2192170/revisions La vérité changera d'avis. Je serais heureux de voir cette question close comme peu claire.
mickmackusa le
2
@mickmackusa je l'ai fait ... Je ne comprends pas votre point. Si vous avez un si gros problème avec la façon dont il est écrit, pourquoi ne pas le résoudre vous
Nick
Réponses:
220
Si vous ciblez spécifiquement "11223344", utilisez str_replace:
Je ne sais pas pourquoi cette réponse a été publiée, c'est un double plus long de la réponse de Dominic et un double plus court de la réponse de Roland ...
remplacer Obligatoire. Spécifie la valeur pour remplacer la valeur dans find
string Obligatoire. Spécifie la chaîne à rechercher
count Facultatif. Une variable qui compte le nombre de remplacements
Comme par exemple OP:
$Example_string ="REGISTER 11223344 here";
$Example_string_PART_REMOVED = str_replace('11223344','', $Example_string);// will leave you with "REGISTER here"// finally - clean up potential double spaces, beginning spaces or end spaces that may have resulted from removing the unwanted string
$Example_string_COMPLETED = trim(str_replace(' ',' ', $Example_string_PART_REMOVED));// trim() will remove any potential leading and trailing spaces - the additional 'str_replace()' will remove any potential double spaces// will leave you with "REGISTER here"
@ElijahLynn replace vous oblige à supprimer des éléments, les modifications futures ou le bruit se briseraient. Faire cela via _replace mais _match continuerait à fonctionner.
TravisO
@TravisO eh bien oui, mais non. Ces deux fonctions sont presque les mêmes en ce qui concerne la mise en œuvre des fonctions, et les chances que les changements futurs affectent l'une d'entre elles sont les mêmes . Il existe la même possibilité de modifications futures sur _match uniquement, ce qui rend cette utilisation invalide et _replace fonctionne toujours correctement. En outre, la gestion des versions est généralement très attentive à ne pas freiner les fonctionnalités précédentes, si possible.
CT.
Vous n'avez pas besoin d'un groupe de capture ici. En fait, l'utilisation du groupe de capture gonfle inutilement le $matchtableau. Retirez les parenthèses puis accédez via $match[0].
mickmackusa
5
substr () est une fonction php intégrée qui renvoie une partie d'une chaîne. La fonction substr () prendra une chaîne comme entrée, la forme d'index où vous voulez que la chaîne soit coupée. et un paramètre facultatif est la longueur de la sous-chaîne. Vous pouvez voir la documentation appropriée et un exemple de code sur http://php.net/manual/en/function.substr.php
Comment proposez-vous que le PO utilise votre indice général pour atteindre le résultat souhaité?
mickmackusa
Je trouve que cette réponse est vague et de faible valeur.
mickmackusa
1
Dynamiquement, si vous souhaitez supprimer (une) partie (s) d'un (des) index (s) fixe (s) d'une chaîne, utilisez cette fonction:
/**
* Removes index/indexes from a string, using a delimiter.
*
* @param string $string
* @param int|int[] $index An index, or a list of indexes to be removed from string.
* @param string $delimiter
* @return string
* @todo Note: For PHP versions lower than 7.0, remove scalar type hints (i.e. the
* types before each argument) and the return type.
*/function removeFromString(string $string, $index,string $delimiter =" "):string{
$stringParts = explode($delimiter, $string);// Remove indexes from string partsif(is_array($index)){foreach($index as $i){
unset($stringParts[(int)($i)]);}}else{
unset($stringParts[(int)($index)]);}// Join all parts together and return itreturn implode($delimiter, $stringParts);}
Pour votre objectif:
remove_from_str("REGISTER 11223344 here",1);// Output: REGISTER here
L'une de ses utilisations est d'exécuter des chaînes de type commande, dont vous connaissez leurs structures.
Ghostdog a déjà suggéré une technique d'explosion-implosion, mais je ne peux pas imaginer divertir une technique aussi longue pour une opération aussi basique.
Il n'y a absolument aucune raison de passer des tableaux à preg_replace()dans ce cas. Il n'y a aucun avantage non plus à utiliser un groupe de capture.
mickmackusa le
Je suis d'accord. Array est ajouté juste pour plus de commodité. Cela peut être négligé. cela ne fera aucun mal. Ajout d'un groupe de capture pour exclure les nombres. Cela fonctionne selon la question tracée. Et d'autres modifications et ajustements peuvent être effectués en fonction des individus.
arango_86
Mon point est qu'il y a des inclusions inutiles dans votre extrait de code qui n'ont aucun sens à inclure.
Ne renverrait-il pas "REGISTER__here", avec deux blancs (pensez aux traits de soulignement comme des espaces, le commentaire ne me permettra pas deux espaces suivants)? Beacuse des espaces avant et après le "(. *)".
TechNyquist
6
Cette réponse est AU MOINS 100% fausse. Preuve: 3v4l.org/LDLEM pourquoi cette réponse a 15 UVs?
remove
, mais il semble probable que vous vouliezextract
que la chaîne ciblée puisse être stockée dans la base de données.REGISTER here
dans la base de données?Réponses:
Si vous ciblez spécifiquement "11223344", utilisez
str_replace
:la source
Vous pouvez utiliser str_replace () , qui est défini comme:
Vous pouvez donc écrire le code comme suit:
Si vous avez besoin d'une meilleure correspondance via des expressions régulières, vous pouvez utiliser preg_replace () .
la source
en supposant que 11223344 n'est pas constant
la source
Comme par exemple OP:
la source
Lorsque vous avez besoin d'une correspondance basée sur des règles, vous devez utiliser regex
Cela correspondra au premier ensemble de nombres, donc si vous avez besoin d'être plus précis, essayez:
la source
$match
tableau. Retirez les parenthèses puis accédez via$match[0]
.substr () est une fonction php intégrée qui renvoie une partie d'une chaîne. La fonction substr () prendra une chaîne comme entrée, la forme d'index où vous voulez que la chaîne soit coupée. et un paramètre facultatif est la longueur de la sous-chaîne. Vous pouvez voir la documentation appropriée et un exemple de code sur http://php.net/manual/en/function.substr.php
REMARQUE: l'index d'une chaîne commence par 0.
la source
Dynamiquement, si vous souhaitez supprimer (une) partie (s) d'un (des) index (s) fixe (s) d'une chaîne, utilisez cette fonction:
Pour votre objectif:
L'une de ses utilisations est d'exécuter des chaînes de type commande, dont vous connaissez leurs structures.
la source
L'extrait suivant imprimera «INSCRIVEZ-VOUS ici»
L'API preg_replace () nous utilise comme indiqué ci-dessous.
la source
preg_replace()
dans ce cas. Il n'y a aucun avantage non plus à utiliser un groupe de capture.Faites ce qui suit
Cela renverrait "INSCRIPTION ici"
ou
Cela renverrait "INSCRIVEZ-VOUS ici"
la source