Come rimuovere parte di una stringa? [chiuso]


152

Come posso rimuovere parte di una stringa?

Stringa di esempio: "REGISTER 11223344 here"

Come posso rimuovere "11223344"dalla stringa di esempio sopra?


La tua domanda è poco chiara / ambigua. Stai usando il termine remove, ma sembra probabile che intendi in extractmodo che la stringa di destinazione possa essere archiviata nel database.
— mickmackusa,

@Makyen Sono abbastanza fiducioso che tu abbia vandalizzato la domanda per rendere corrette molte delle risposte. Pensaci: perché l'OP vorrebbe salvare REGISTER herenel database?
— Mickmackusa,

2
La rimozione di @mickmackusa può essere sinonimo di take away, ovvero togliendo 11223344 dalla stringa, non riesco a vedere il problema qui. Nel peggiore dei casi è ambiguo, non è certamente "vandalizzato"
— Nick,

Leggi le versioni pre-vandalizzate. @ Nick stackoverflow.com/posts/2192170/revisions La verità farà cambiare idea. Sarei felice di vedere questa domanda chiusa come poco chiara.
— Mickmackusa,

2
@mickmackusa l'ho fatto ... non riesco a vedere il tuo punto. Se hai un grosso problema con il modo in cui è scritto, perché non risolverlo da solo
— Nick,

Risposte:


220

Se scegli come target specifico "11223344", utilizza str_replace:

// str_replace($search, $replace, $subject)
echo str_replace("11223344", "","REGISTER 11223344 here");

4
str_replace ($ cerca, $ sostituisci, $ soggetto)
— drooh

119

Puoi usare str_replace () , che è definito come:

str_replace($search, $replace, $subject)

Quindi potresti scrivere il codice come:

$subject = 'REGISTER 11223344 here' ;
$search = '11223344' ;
$trimmed = str_replace($search, '', $subject) ;
echo $trimmed ;

Se hai bisogno di una migliore corrispondenza tramite espressioni regolari puoi usare preg_replace () .


2
Se uno ha bisogno di regex matching c'è anche preg_replace () us2.php.net/manual/en/function.preg-replace.php
— Elijah Lynn

4
Non sono sicuro del perché questa risposta sia stata pubblicata, è un duplicato più lungo della risposta di Dominic e un duplicato più breve della risposta di Roland ...
— CPHPython

23

supponendo che 11223344 non sia costante

$string="REGISTER 11223344 here";
$s = explode(" ",$string);
unset($s[1]);
$s = implode(" ",$s);
print "$s\n";

10
str_replace(find, replace, string, count)
  • trova Obbligatorio. Specifica il valore da trovare
  • sostituire Obbligatorio. Specifica il valore per sostituire il valore in find
  • stringa obbligatoria. Specifica la stringa da cercare
  • conteggio facoltativo. Una variabile che conta il numero di sostituzioni

Come da esempio 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"

1
Come proponete che l'OP utilizzi questo pseudo codice?
— Mickmackusa,

6

Quando è necessaria la corrispondenza basata su regole, è necessario utilizzare regex

$string = "REGISTER 11223344 here";
preg_match("/(\d+)/", $string, $match);
$number = $match[1];

Che corrisponderà al primo set di numeri, quindi se devi essere più specifico prova:

$string = "REGISTER 11223344 here";
preg_match("/REGISTER (\d+) here/", $string, $match);
$number = $match[1];

preg_replace () sarebbe molto più semplice, no? us2.php.net/manual/en/function.preg-replace.php
— Elijah Lynn

1
@ElijahLynn sostituzione richiede di rimuovere le cose, i cambiamenti futuri o il rumore si romperanno. In questo modo tramite _replace ma _match continuerebbe a funzionare.
— TravisO,

@TravisO bene sì, ma no. Queste due sono quasi le stesse funzioni di implementazione saggia, e le probabilità che i futuri cambiamenti influenzino una di esse sono le stesse . Esiste la stessa possibilità di future modifiche solo su _match, rendendo questo uso non valido e _replace funziona ancora bene. Inoltre, il controllo delle versioni di solito è molto attento a non frenare le funzionalità precedenti, se possibile.
— CT.

Non è necessario un gruppo di acquisizione qui. In effetti, l'utilizzo del gruppo di acquisizione gonfia inutilmente l' $matcharray. Rimuovere le parentesi quindi accedere tramite $match[0].
— Mickmackusa,

5

substr () è una funzione php incorporata che restituisce parte di una stringa. La funzione substr () prenderà una stringa come input, la forma dell'indice in cui si desidera tagliare la stringa. e un parametro opzionale è la lunghezza della sottostringa. Puoi vedere la documentazione corretta e il codice di esempio su http://php.net/manual/en/function.substr.php

NOTA: l'indice per una stringa inizia con 0.


In che modo proponi che il PO utilizzi il tuo suggerimento generale per ottenere il risultato desiderato?
— Mickmackusa,

Trovo che questa risposta sia vaga e di scarso valore.
— Mickmackusa,

1

In modo dinamico, se si desidera rimuovere (a) parti da (a) indici fissi di una stringa, utilizzare questa funzione:

/**
 * 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 parts
    if (is_array($index)) {
        foreach ($index as $i) {
            unset($stringParts[(int)($i)]);
        }
    } else {
        unset($stringParts[(int)($index)]);
    }

    // Join all parts together and return it
    return implode($delimiter, $stringParts);
}

Per il tuo scopo:

remove_from_str("REGISTER 11223344 here", 1); // Output: REGISTER here

Uno dei suoi usi è quello di eseguire stringhe simili a comandi, che conosci le loro strutture.


1
Ghostdog ha già suggerito una tecnica di esplodere, ma non riesco a immaginare di intrattenere una tecnica così lungimirante per un'operazione così basilare.
— mickmackusa,

0

Il frammento seguente stamperà "REGISTRA qui"

$string = "REGISTER 11223344 here";

$result = preg_replace(
   array('/(\d+)/'),
   array(''),
   $string
);

print_r($result);

L'API preg_replace () ci utilizza come indicato di seguito.

$result = preg_replace(
    array('/pattern1/', '/pattern2/'),
    array('replace1', 'replace2'),
    $input_string
);

In preg_replace()questo caso non vi è assolutamente motivo di passare array . Né vi è alcun vantaggio nell'utilizzare un gruppo di acquisizione.
— mickmackusa,

Sono d'accordo. L'array viene aggiunto solo per comodità. Può essere trascurato. non farà alcun male. Aggiunto gruppo di acquisizione per escludere i numeri. Questo funziona secondo la domanda tracciata. E ulteriori modifiche e messa a punto possono essere fatte in base agli individui.
— arango_86

Il punto è che ci sono inclusioni inutili nel tuo frammento che non ha senso includere.
— Mickmackusa,

-1

Eseguire le seguenti operazioni

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER(.*)here/','',$string);

Ciò restituirebbe "REGISTRATIqui"

o

$string = 'REGISTER 11223344 here';

$content = preg_replace('/REGISTER (.*) here/','',$string);

Ciò restituirebbe "REGISTRATI qui"


4
Non restituirebbe "REGISTER__here", con due spazi vuoti (pensa che il trattino basso come spazi, il commento non mi permetterà due spazi successivi)? Perché gli spazi prima e dopo il "(. *)".
— TechNyquist,

6
Questa risposta è ALMENO AL 100% errata. Prova: 3v4l.org/LDLEM perché questa risposta ha 15 UV?
— Mickmackusa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.