Me pregunto cómo podría eliminar el texto entre un conjunto de paréntesis y los paréntesis mismos en php.Eliminar texto entre paréntesis PHP
Ejemplo:
ABC (Prueba1)
me gustaría que para borrar (Prueba1) y sólo dejar ABC
Gracias
Me pregunto cómo podría eliminar el texto entre un conjunto de paréntesis y los paréntesis mismos en php.Eliminar texto entre paréntesis PHP
Ejemplo:
ABC (Prueba1)
me gustaría que para borrar (Prueba1) y sólo dejar ABC
Gracias
$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // 'ABC '
preg_replace
es un habitual basado en Perl expresión reemplazar rutina. Lo que hace este script es coincide con todas las ocurrencias de un paréntesis de apertura, seguido de cualquier número de caracteres no un paréntesis de cierre, y de nuevo seguido de un paréntesis de cierre, y luego los elimina:
desglose Expresión regular:
/ - 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
sin expresiones regulares
$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
Rápido y sucio. Me gusta. –
La gente, las expresiones regulares no se pueden utilizar para analizar lenguajes no regulares. Los idiomas no regulares son aquellos que requieren un estado para interpretar (es decir, recordar cuántos paréntesis están actualmente abiertos).
Todas las respuestas anteriores fallarán en esta cadena: "ABC (hola (mundo) cómo estás)".
Lea Jeff Atwood's Parsing Html The Cthulhu Way: http://www.codinghorror.com/blog/archives/001311.html, y luego use un analizador escrito a mano (recorra los caracteres en la cadena, vea si el carácter es un paréntesis o no, mantenga una pila) o use un lexer/analizador capaz de analizar un lenguaje sin contexto.
también ver este artículo de Wikipedia sobre el "lenguaje de los paréntesis se ajustan correctamente:" http://en.wikipedia.org/wiki/Dyck_language
Las expresiones regulares de PHP no están limitadas a los idiomas regulares. '\ (([^()] * + | (? R)) * \)' coincide paréntesis anidados arbitrariamente bien. –
Buena llamada. Amplia información sobre el tema: http://php.net/manual/en/regexp.reference.recursive.php –
$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);
Funciona mediante un bucle a través de cada carácter, contando entre paréntesis. Solo cuando $paren_num == 0
(cuando está fuera de todos los paréntesis) agrega los caracteres a nuestra cadena resultante, $new_string
.
Impresionante, gracias ^^ – whitesiroi
La respuesta aceptada funciona muy bien para paréntesis no anidados. Una ligera modificación de la expresión regular le permite trabajar en paréntesis anidados.
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
método más Quik (sin preg):
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
Si no desea recortar espacios al final de la palabra, basta con retirar función de ajuste de código.
$str ="ABC (Test1)";
echo preg_replace('~\(.*\)~' , "", $str);
wow: O Respuesta rápida! ¡Gracias! ¿Te importaría explicarlo un poco? Realmente no entiendo lo que has hecho. –
No deberías tratar de escapar de) en tu clase de personaje. – mopoke
Es una expresión regular. Es un poco difícil de explicar jeje. – metrobalderas