Je me demande juste comment je pourrais supprimer le texte entre un ensemble de parenthèses et les parenthèses elles-mêmes en php.
Exemple :
ABC (Test1)
Je voudrais qu'il supprime (Test1) et ne laisse que ABC
Merci
$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // 'ABC '
preg_replace
est une routine de remplacement d'expression régulière basée sur Perl. Ce que fait ce script, c'est qu'il correspond à toutes les occurrences d'une parenthèse ouvrante, suivies de n'importe quel nombre de caractères pas une parenthèse fermante, puis à nouveau suivie d'une parenthèse fermante, puis les supprime:
Ventilation des expressions régulières:
/ - 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
La réponse acceptée fonctionne très bien pour les parenthèses non imbriquées. Une légère modification de l'expression régulière lui permet de travailler sur des parenthèses imbriquées.
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
$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);
Il fonctionne en parcourant chaque caractère, en comptant les parenthèses. Seulement quand $paren_num == 0
(quand il est en dehors de toutes les parenthèses) ajoute-t-il les caractères à notre chaîne résultante, $new_string
.
sans regex
$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
Les gens, les expressions régulières NE PEUVENT PAS être utilisées pour analyser des langages non réguliers. Les langues non régulières sont celles qui nécessitent un état pour être interprétées (c'est-à-dire se souvenir du nombre de parenthèses actuellement ouvertes).
Toutes les réponses ci-dessus échoueront sur cette chaîne: "ABC (bonjour (monde) comment vas-tu)".
Lisez Parsing Html de Jeff Atwood The Cthulhu Way: https://blog.codinghorror.com/parsing-html-the-cthulhu-way/ , puis utilisez un analyseur écrit à la main (boucle les caractères de la chaîne, voir si le caractère est une parenthèse ou non, conserver une pile) ou utiliser un lexeur/analyseur capable d'analyser un langage sans contexte.
Voir également cet article wikipedia sur la "langue des parenthèses correctement appariées:" https://en.wikipedia.org/wiki/Dyck_language
$str ="ABC (Test1)";
echo preg_replace( '~\(.*\)~' , "", $str );
La plupart des méthodes quik (sans preg):
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
Si vous ne souhaitez pas supprimer les espaces à la fin de Word, supprimez simplement la fonction de suppression du code.