Wie entferne ich einen Teil einer Zeichenfolge? [geschlossen]

152

Wie kann ich einen Teil einer Zeichenfolge entfernen?

Beispielzeichenfolge: "REGISTER 11223344 here"

Wie kann ich "11223344"aus der obigen Beispielzeichenfolge entfernen ?

Siddharth
quelle
Ihre Frage ist unklar / mehrdeutig. Sie verwenden den Begriff remove, aber es ist wahrscheinlich, dass Sie damit meinen extract, dass die Zielzeichenfolge in der Datenbank gespeichert werden kann.
mickmackusa
@Makyen Ich bin ziemlich zuversichtlich, dass Sie die Frage zerstört haben, um viele der Antworten richtig zu machen. Denken Sie darüber nach: Warum sollte das OP REGISTER herein der Datenbank speichern wollen ?
Mickmackusa
2
@mickmackusa entfernen kann gleichbedeutend sein mit wegnehmen von, dh 11223344 aus dem String nehmen, ich sehe das Problem hier nicht. Im schlimmsten Fall ist es mehrdeutig, es ist sicherlich nicht "vandalisiert"
Nick
Lesen Sie die vorab zerstörten Versionen. @Nick stackoverflow.com/posts/2192170/revisions Die Wahrheit wird Ihre Meinung ändern. Ich würde mich freuen, wenn diese Frage als unklar geklärt würde.
Mickmackusa
2
@ Mickmackusa Ich habe ... Ich verstehe deinen Standpunkt nicht. Wenn Sie ein so großes Problem mit der Art und Weise haben, wie es geschrieben steht, warum beheben Sie es nicht selbst
Nick,

Antworten:

219

Wenn Sie speziell auf "11223344" abzielen, verwenden Sie str_replace:

// str_replace($search, $replace, $subject)
echo str_replace("11223344", "","REGISTER 11223344 here");
Dominic Rodger
quelle
4
str_replace ($ search, $ replace, $ subject)
drooh
119

Sie können str_replace () verwenden , das wie folgt definiert ist:

str_replace($search, $replace, $subject)

Sie können den Code also wie folgt schreiben:

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

Wenn Sie eine bessere Übereinstimmung über reguläre Ausdrücke benötigen, können Sie preg_replace () verwenden .

dhorat
quelle
2
Wenn man einen Regex-Abgleich benötigt, gibt es auch preg_replace () us2.php.net/manual/en/function.preg-replace.php
Elijah Lynn
4
Ich
bin
23

Angenommen, 11223344 ist nicht konstant

$string="REGISTER 11223344 here";
$s = explode(" ",$string);
unset($s[1]);
$s = implode(" ",$s);
print "$s\n";
Ghostdog74
quelle
8
str_replace(find, replace, string, count)
  • find Erforderlich. Gibt den Wert zu finden
  • Ersetzen Erforderlich. Gibt den Wert an , der den Wert in find ersetzen soll
  • Zeichenfolge Erforderlich. Gibt die zu durchsuchende Zeichenfolge an
  • Anzahl Optional. Eine Variable, die die Anzahl der Ersetzungen zählt

Gemäß OP-Beispiel:

$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"
Stnfordly
quelle
1
Wie schlagen Sie vor, dass das OP diesen Pseudocode verwendet?
Mickmackusa
6

Wenn Sie einen regelbasierten Abgleich benötigen, müssen Sie Regex verwenden

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

Dies entspricht dem ersten Satz von Zahlen. Wenn Sie also genauer sein müssen, versuchen Sie Folgendes:

$string = "REGISTER 11223344 here";
preg_match("/REGISTER (\d+) here/", $string, $match);
$number = $match[1];
TravisO
quelle
preg_replace () wäre viel einfacher, nicht wahr? us2.php.net/manual/en/function.preg-replace.php
Elijah Lynn
1
@ElijahLynn Ersetzen erfordert, dass Sie Dinge entfernen, zukünftige Änderungen oder Geräusche würden brechen. Dies über _replace zu tun, aber _match würde weiterhin funktionieren.
TravisO
@TravisO gut ja, aber nein. Diese beiden Funktionen sind in Bezug auf die Implementierung nahezu identisch, und die Chancen, dass sich zukünftige Änderungen auf eine von ihnen auswirken, sind gleich . Es besteht die gleiche Möglichkeit, dass zukünftige Änderungen nur an _match vorgenommen werden, wodurch diese Verwendung ungültig wird und _replace immer noch einwandfrei funktioniert. Außerdem ist bei der Versionierung in der Regel sehr darauf zu achten, dass frühere Funktionen nach Möglichkeit nicht gebremst werden.
CT.
Sie brauchen hier keine Erfassungsgruppe. Durch die Verwendung der Erfassungsgruppe wird das $matchArray unnötig aufgebläht . Entfernen Sie die Klammern und greifen Sie über zu $match[0].
Mickmackusa
5

substr () ist eine integrierte PHP-Funktion, die einen Teil eines Strings zurückgibt. Die Funktion substr () verwendet eine Zeichenfolge als Eingabe, die Indexform, in der die Zeichenfolge abgeschnitten werden soll. und ein optionaler Parameter ist die Länge des Teilstrings. Die richtige Dokumentation und den Beispielcode finden Sie unter http://php.net/manual/en/function.substr.php

HINWEIS: Der Index für eine Zeichenfolge beginnt mit 0.

Umair Jabbar
quelle
Wie schlagen Sie vor, dass das OP Ihren allgemeinen Hinweis verwendet, um das gewünschte Ergebnis zu erzielen?
Mickmackusa
Ich finde diese Antwort vage und von geringem Wert.
Mickmackusa
1

Verwenden Sie diese Funktion dynamisch, wenn Sie (a) Teile aus (a) festen Indizes einer Zeichenfolge entfernen möchten:

/**
 * 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);
}

Für Ihren Zweck:

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

Eine seiner Anwendungen besteht darin, befehlsähnliche Zeichenfolgen auszuführen, deren Strukturen Sie kennen.

MAChitgarha
quelle
1
Ghostdog schlug bereits eine Explode-Implode-Technik vor, aber ich kann mir nicht vorstellen, eine so langwierige Technik für eine so grundlegende Operation zu unterhalten.
mickmackusa
0

Das folgende Snippet gibt "REGISTRIEREN hier" aus.

$string = "REGISTER 11223344 here";

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

print_r($result);

Die API preg_replace () verwendet uns wie unten angegeben.

$result = preg_replace(
    array('/pattern1/', '/pattern2/'),
    array('replace1', 'replace2'),
    $input_string
);
arango_86
quelle
preg_replace()In diesem Fall gibt es absolut keinen Grund, Arrays zu übergeben . Die Verwendung einer Erfassungsgruppe hat auch keinen Vorteil.
mickmackusa
Genau. Das Array wird nur zur Vereinfachung hinzugefügt. Es kann vernachlässigt werden. es wird keinen Schaden anrichten. Erfassungsgruppe zum Ausschließen von Zahlen hinzugefügt. Dies funktioniert gemäß der dargestellten Frage. Weitere Modifikationen und Feinabstimmungen können individuell vorgenommen werden.
arango_86
Mein Punkt ist, dass Ihr Snippet unnötige Einschlüsse enthält, deren Aufnahme keinen Sinn ergibt.
Mickmackusa
-1

Mach Folgendes

$string = 'REGISTER 11223344 here';

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

Dies würde "REGISTERhere" zurückgeben.

oder

$string = 'REGISTER 11223344 here';

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

Dies würde "REGISTRIEREN hier" zurückgeben.

Elitmiar
quelle
4
Würde es nicht "REGISTER__here" mit zwei Leerzeichen zurückgeben (denken Sie an Unterstriche als Leerzeichen, Kommentar erlaubt mir nicht zwei aufeinanderfolgende Leerzeichen)? Wegen der Leerzeichen vor und nach dem "(. *)".
TechNyquist
6
Diese Antwort ist mindestens 100% falsch. Beweis: 3v4l.org/LDLEM Warum hat diese Antwort 15 UVs?
Mickmackusa