Tekst tussen haakjes verwijderen PHP

Ik vraag me af hoe ik de tekst tussen een set haakjes en de haakjes zelf in php kan verwijderen.

Voorbeeld:

ABC (Test1)

Ik wil dat het wordt verwijderd (Test1) en alleen ABC verlaat

Bedankt


Antwoord 1, autoriteit 100%

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

preg_replaceis een op perl gebaseerde vervangingsroutine voor reguliere expressies. Wat dit script doet, komt overeen met alle gevallen van een haakje openen, gevolgd door een willekeurig aantal tekens nieteen haakje sluiten, en opnieuw gevolgd door een haakje sluiten, en verwijdert ze vervolgens:

Uitsplitsing van reguliere expressies:

/  - 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

Antwoord 2, autoriteit 11%

Het geaccepteerde antwoord werkt uitstekend voor niet-geneste haakjes. Door een kleine wijziging aan de regex kan het werken met geneste haakjes.

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

Antwoord 3, autoriteit 7%

zonder regex

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

Antwoord 4, autoriteit 7%

$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);

Het werkt door elk teken te doorlopen en haakjes te tellen. Alleen wanneer $paren_num == 0(wanneer het buiten alle haakjes staat) voegt het de karakters toe aan onze resulterende string, $new_string.


Antwoord 5, autoriteit 2%

Mensen, reguliere expressies KUNNEN NIET worden gebruikt om niet-reguliere talen te ontleden. Niet-reguliere talen zijn talen waarvoor de staat moet worden geïnterpreteerd (d.w.z. onthouden hoeveel haakjes er momenteel open zijn).

Alle bovenstaande antwoorden zullen mislukken op deze string: “ABC (hallo (wereld) hoe gaat het met u)”.

Lees Jeff Atwood’s Parsing Html The Cthulhu Way: https://blog .codinghorror.com/parsing-html-the-cthulhu-way/, en gebruik dan ofwel een met de hand geschreven parser (loop door de karakters in de string, kijk of het karakter een haakje is of niet, onderhoud een stapel) of gebruik een lexer/parser die een contextvrije taal kan ontleden.

Zie ook dit wikipedia-artikel over de “taal van correct overeenkomende haakjes:” https://en. wikipedia.org/wiki/Dyck_language


Antwoord 6, autoriteit 2%

Meest snelle methode (zonder preg):

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

Als je geen spaties aan het einde van een woord wilt inkorten, verwijder dan de trimfunctie uit de code.


Antwoord 7, autoriteit 2%

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

Other episodes