2012-06-28 95 views
7

Este es un problema realmente simple, pero no pude encontrar una solución en ningún lado.PHP/REGEX: Obtener una cadena entre paréntesis

Intento utilizar preg_match o preg_match_all para obtener una cadena entre paréntesis, pero sin los paréntesis.

Hasta ahora, mi expresión se parece a esto:

\([A-Za-z0-9 ]+\) 

y devuelve el siguiente resultado:

3 (destacado hueco) 928-129 (< - cadena original)

(resaltado hueco) (< - resultado)

Lo que quiero es la cadena entre paréntesis, pero sin los paréntesis. Se vería así:

destacado hueco

probablemente podría reemplazar los paréntesis después con str_replace o algo así, pero eso no parece ser una solución muy elegante para mí.

¿Qué debo agregar, para que los paréntesis no se incluyan en el resultado?

Gracias por su ayuda, ustedes son geniales! :)

+0

Lo que están pidiendo los soportes son en realidad paréntesis. – JohnK

+2

Posible duplicado de [PHP: ¿la mejor forma de extraer texto entre paréntesis?] (Https://stackoverflow.com/questions/196520/php-best-way-to-extract-text-within-parenthesis) – EdChum

Respuesta

12

sólo tiene que añadir la captura de paréntesis, además de su paréntesis escapado.

<?php 
    $in = "hello (world), my name (is andrew) and my number is (845) 235-0184"; 
    preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', $in, $out); 
    print_r($out[1]); 
?> 

Este salidas:

Array ([0] => world [1] => is andrew [2] => 845) 
+0

Gracias por su respuesta. Esto funciona muy bien (además de las barras invertidas escapadas). Pero, ¿cómo ayudan los corchetes? Pensé que mi expresión se leería así: "un corchete abierto seguido de cantidad de caracteres que consisten en letras, números y espacios, seguidos de un corchete cerrado". ¿Cómo entran en juego los corchetes (no escapados)? ¡Gracias por tu ayuda! :) – Macks

+1

Oops, perdón por las barras invertidas escapadas; arreglado ahora. Los corchetes no escapados tienen un significado especial: captura. Ver, de forma predeterminada, la coincidencia completa se captura en '' [0] '', por lo que '' $ out [0] '' contiene todo, incluso los corchetes que no desea. Cada ''() '' capture, así, _captures_ lo que esté entre ellos, y los almacena en índices de matriz secuencial, es decir, '' [1] '', '' [2] '', '' [3] '', etc.Por ejemplo, si su cadena es "abc123def456" y su expresión regular es ''/abc (\ d +) (\ w +) (\ d) (\ d +)/'', sus capturas serían así: '' [1] '' = "123", '' [2] '' = "def", '' [3] '' = "4", y '' [4] '' = "56". –

+0

La diferencia entre '' preg_match'' y '' preg_match_all'' es que este último, como su nombre indica, coincide con todos, por lo que habrá una matriz dentro de la matriz: '' [1] = {"world" , "es andrew", "845"} ''. –

22

intento:

preg_match('/\((.*?)\)/', $s, $a); 

de salida:

Array 
(
    [0] => (hollow highlight) 
    [1] => hollow highlight 
) 
+0

Gracias por su ¡ayuda! :) – Macks

+0

gracias esto funcionó para mí – itsandy

+0

Realmente salvaste mi día :) – Hossein

Cuestiones relacionadas