Text zwischen Klammern entfernen PHP

Lesezeit: 4 Minuten

Text zwischen Klammern entfernen PHP
Begin Fisch

Ich frage mich nur, wie ich den Text zwischen einer Reihe von Klammern und den Klammern selbst in PHP entfernen könnte.

Beispiel :

ABC (Test1)

Ich möchte es löschen (Test1) und nur ABC verlassen

Danke

Text zwischen Klammern entfernen PHP
cmptrgeekken

$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // 'ABC '

preg_replace ist eine Perl-basierte Routine zum Ersetzen regulärer Ausdrücke. Dieses Skript vergleicht alle Vorkommen einer öffnenden Klammer, gefolgt von einer beliebigen Anzahl von Zeichen nicht eine schließende Klammer, gefolgt von einer schließenden Klammer, und löscht sie dann:

Aufschlüsselung regulärer Ausdrücke:

/  - opening delimiter (necessary for regular expressions, can be any character that doesn't appear in the regular expression
\( - Match an opening parenthesis
[^)]+ - Match 1 or more character that is not a closing parenthesis
\) - Match a closing parenthesis
/  - Closing delimiter

  • Sie sollten nicht versuchen, dem ) in Ihrer Zeichenklasse zu entkommen.

    – mopoke

    1. Februar 2010 um 2:50 Uhr

  • leider entfernt dies keine verschachtelten Klammern wie z A (B (C) D) und lässt dich mit A D

    – David K.

    12. Juni 2014 um 11:26 Uhr


  • Wenn es um Text geht (wie das Entfernen aus der Mitte meines Kommentars) – dann ist diese Funktion in Ordnung. Verschachtelte Klammern werden im Allgemeinen nicht in Textzeichenfolgen gesehen, zumindest nicht im Englischen, aber in mathematischen Gleichungen.

    – Jeff Clayton

    15. Februar 2018 um 13:55 Uhr


  • @cmptrgeekken Danke für deine kurze Zusammenfassung 🙂

    – Jean Manzo

    3. März 2019 um 20:47 Uhr

Die akzeptierte Antwort funktioniert hervorragend für nicht verschachtelte Klammern. Eine leichte Modifikation der Regex ermöglicht es, mit verschachtelten Klammern zu arbeiten.

$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);

  • Ich mag dieses! Vergessen Sie jedoch nicht, die potenziellen zusätzlichen Leerzeichen zu ersetzen, die möglicherweise in Ihrer Ergebniszeichenfolge zurückbleiben

    – Kalle Samuelsson

    9. November 2018 um 8:43 Uhr

  • Das ist mit Abstand die beste Lösung, die ich gefunden habe. Ich war auch neugierig, was passieren würde, wenn ich versehentlich ein verirrtes “(” hinterlassen würde. Und es tat, was ich dachte: Lass es einfach in Ruhe. Als Ergebnis wurde ein kleiner zusätzlicher Text angezeigt, aber es hat nichts kaputt gemacht. Ich bin froh.

    – Matthäus Campbell

    12. April 2021 um 21:28 Uhr


ohne Regex

$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);

  • Dies funktioniert für “ABC (Test)”, schlägt jedoch schlecht bei “ABC (Test) DEF (härterer Test)” fehl, wo es sehr, sehr verwirrt wird.

    – ftrotter

    17. August 2018 um 2:29 Uhr

1646259847 580 Text zwischen Klammern entfernen PHP
tyjkenn

$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
$paren_num = 0;
$new_string = '';
foreach($string as $char) {
    if ($char == '(') $paren_num++;
    else if ($char == ')') $paren_num--;
    else if ($paren_num == 0) $new_string .= $char;
}
$new_string = trim($new_string);

Es funktioniert, indem es jedes Zeichen durchläuft und Klammern zählt. Nur wenn $paren_num == 0 (wenn es außerhalb aller Klammern steht) hängt es die Zeichen an unsere resultierende Zeichenfolge an, $new_string.

1641848507 762 Warum kann ich in PHP keine Konstruktoren uberladen
Alexander Weinstein

Leute, reguläre Ausdrücke können NICHT verwendet werden, um nicht-reguläre Sprachen zu analysieren. Nicht-reguläre Sprachen sind diejenigen, die einen Zustand zum Interpretieren erfordern (dh daran erinnern, wie viele Klammern derzeit geöffnet sind).

Alle oben genannten Antworten werden bei dieser Zeichenfolge fehlschlagen: “ABC (hello (world) how are you)”.

Lesen Sie Jeff Atwoods Parsing Html The Cthulhu Way: https://blog.codinghorror.com/parsing-html-the-cthulhu-way/und verwenden Sie dann entweder einen von Hand geschriebenen Parser (durchlaufen Sie die Zeichen in der Zeichenfolge, prüfen Sie, ob das Zeichen eine Klammer ist oder nicht, verwalten Sie einen Stapel) oder verwenden Sie einen Lexer/Parser, der eine kontextfreie Sprache analysieren kann.

Siehe auch diesen Wikipedia-Artikel über die “Sprache richtig passender Klammern:” https://en.wikipedia.org/wiki/Dyck_language

  • Die regulären Ausdrücke von PHP sind nicht auf reguläre Sprachen beschränkt. \(([^()]*+|(?R))*\) passt gut zu willkürlich verschachtelten Klammern.

    – Tim Pietzcker

    10. August 2013 um 17:50 Uhr

  • Guter Aufruf. Umfangreiche Infos zum Thema: php.net/manual/en/regexp.reference.recursive.php

    – Alex Weinstein

    16. Juni 2016 um 23:21 Uhr

1646259848 435 Text zwischen Klammern entfernen PHP
MERT DOĞAN

Schnellste Methode (ohne Preg):

$str="ABC (TEST)";
echo trim(substr($str,0,strpos($str,'(')));

Wenn Sie keine Leerzeichen am Ende des Wortes trimmen möchten, entfernen Sie einfach die Trim-Funktion aus dem Code.

  • Die regulären Ausdrücke von PHP sind nicht auf reguläre Sprachen beschränkt. \(([^()]*+|(?R))*\) passt gut zu willkürlich verschachtelten Klammern.

    – Tim Pietzcker

    10. August 2013 um 17:50 Uhr

  • Guter Aufruf. Umfangreiche Infos zum Thema: php.net/manual/en/regexp.reference.recursive.php

    – Alex Weinstein

    16. Juni 2016 um 23:21 Uhr

Text zwischen Klammern entfernen PHP
Naga

$str ="ABC (Test1)";    
echo preg_replace( '~\(.*\)~' , "", $str );      

916750cookie-checkText zwischen Klammern entfernen PHP

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy